나의 풀이
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문이 직사각형 이동을 나타낸다.
- 고수의 풀이같은 경우 세 가지 경우로 쪼개서 풀어냈다.
- 대각선으로만 이동하는 경우
- 직선으로만 이동하는 경우
- 두 경우를 혼용하는 경우