백준 1459번 - 걷기
백준 1459번 바로가기 나의 풀이 x, y, w, s = map(int, input().split()) a=max(x,y) b=min(x,y) ans = 0 if 2*w > s: ans += b*s else: ans += b*2*w if w > s: if (c:=(a-b)) % 2 == 0: ans += c*s else: ans += (c-1)*s + w else: ans += (a-b)*w print(ans) 고수의 풀이 x,y,w,s = map(int, input().split()) x,y = min(x,y), max(x,y) m = (x + y) % 2 print(min((x+y)*w, x*s+(y-x)*w, (y-m)*s+m*w)) 출처 CODE REVIEW case_work에 해당하는 문제답게 경우를 쪼개서 풀어내는 것이 풀이의 핵심이다. 나의 경우엔 직사각형을 정사각형과 직사각형으로 쪼개서 풀었다. 앞의 if문이 정사각형 이동, 뒤의 if문이 직사각형 이동을 나타낸다. 고수의 풀이같은 경우 세 가지 경우로 쪼개서 풀어냈다. 대각선으로만 이동하는 경우 직선으로만 이동하는 경우 두 경우를 혼용하는 경우