8713번 Znak działania | 뭐라도 하겠지

8713번 Znak działania

이왜틀?


img01

8713번 Znak działania - 백준

1번 틀리고 도망갔다.
어째서 튀었지? 왜 맞서싸우지 않았지?
상대는 기껏해야 브론즈인데!

StringTokenizer st=new StringTokenizer(br.readLine());
int a=Integer.parseInt(st.nextToken());
int b=Integer.parseInt(st.nextToken());

int q=a+b;
int w=a-b;
int r=a*b;
int c=0;
if(q==w) c++;
if(w==r) c++;
if(q==r) c++;

if(c>0) bw.write("NIE");
else{
    StringBuilder sb=new StringBuilder();
    if(q>w&&q>r){
        if(a<0) sb.append("(");
        sb.append(a+(a<0?")+":"+"));
        if(b<0) sb.append("(");
        sb.append(b+(b<0?")=":"="));
        sb.append(a+b+"");
        bw.write(sb.toString());
    }else if(w>q&&w>r){
        if(a<0) sb.append("(");
        sb.append(a+(a<0?")-":"-"));
        if(b<0) sb.append("(");
        sb.append(b+(b<0?")=":"="));
        sb.append(a-b+"");
        bw.write(sb.toString());
    }else{
        if(a<0) sb.append("(");
        sb.append(a+(a<0?")*":"*"));
        if(b<0) sb.append("(");
        sb.append(b+(b<0?")=":"="));
        sb.append(a*b+"");
        bw.write(sb.toString());
    }
}

맙소사 이게 무어람?
도망친 이유를 알 것 같다.
지금 나도 도망치고 싶다.

설계


깨끗하게 처음부터 하는 걸로 치자.
조건은 아래와 같다.

  • 두 정수 연산 결과는 최대한 커져야 한다.
  • 사용하는 연산 기호는 +, -, * 3개이다.
  • 최대가 될 수 있는 경우가 많다면 NIE를 출력한다.
  • 음수인 경우 출력 시 괄호로 감싼다.

구현


뭐 음수일때 조건 따져서 하는 것 보다
수가 그리 크지 않으니 그냥 계산 다 때려보는게 빠르고 정확하다.

a, b = map(int, input().split())

sum = a + b
sub = a - b
mul = a * b

max = max(sum, sub, mul)
count = [sum, sub, mul].count(max)

if count > 1:
    print("NIE")
else:
    print(f"{'(' if a < 0 else ''}{a}{')' if a < 0 else ''}{'+' if max == sum else '-' if max == sub else '*'}{'(' if b < 0 else ''}{b}{')' if b < 0 else ''}={'(' if max < 0 else ''}{max}{')' if max < 0 else ''}")

채점


img02

반성


파이썬은 들여쓰기에 민감해서 printf가 질질 늘어졌다.
너무 보기싫었는데 이것도 방법이 다 있더라.

print(
    f"{'(' if a < 0 else ''}{a}{')' if a < 0 else ''}"
    f"{'+' if max == sum else '-' if max == sub else '*'}"
    f"{'(' if b < 0 else ''}{b}{')' if b < 0 else ''}"
    f"{'=(' if max < 0 else '='}{max}{')' if max < 0 else ''}"
)

이렇게 적당히 끊어놓으면 풜씬 보기 좋아진다.

코드 확인


Link to GitHub

Updated: