문제
https://www.acmicpc.net/problem/30703
풀이
첫 번째 시도
더보기
더보기
N = int(input())
A = list(map(int, input().split())) # 초기 온도
B = list(map(int, input().split())) # 목표 온도
X = list(map(int, input().split())) # 온도 변화 값
# 모든 i에 대해서 온도가 한 번에 조절되는게 핵심
answer = 0
for i in range(N) :
diff = A[i] - B[i]
if diff < 0 :
diff = -diff
# 먼저 맞추는게 가능한지 아닌지 판단하기
# 초기 온도와 목표 온도의 차이가 온도 변화 값의 배수가 아니라면 온도를 절대 맞출 수 없다
if diff % X[i] != 0 :
answer = -1
break
else :
answer = max(answer, diff // X[i])
print(answer)
→ 틀렸습니다
초기 온도와 목표 온도의 차이가 온도 변화 값의 배수라면, 그 몫만큼 버튼을 누르면 된다고 생각한 것이 틀린 부분이다.
반례
3
1 3 5
7 9 5
2 3 4
- 내 코드에서는 (7-1)//2 = 3 이 정답으로 출력되지만, 실제로는 온도 조절 버튼을 3번 누르게 된다면 두 번째, 세 번째 비커의 온도를 맞출 수 없게 된다.
두 번째 시도
만약 첫 번째 비커의 온도를 맞추기 위해 버튼을 홀수번 눌러야 하고, 두 번째 비커의 온도를 맞추기 위해서는 버튼을 짝수번 눌러야만 한다면 온도 조절 장치만으로 온도를 맞출 수 없게 된다.
이런 상황을 고려해야 하므로 answer를 바로 갱신해주는게 아니라, 버튼을 짝수번 누르는지 홀수번 누르는지 확인 후 이전 비커의 상황과 비교하여 동일한 경우에만 갱신하는 것으로 코드를 바꿨다.
N = int(input())
A = list(map(int, input().split())) # 초기 온도
B = list(map(int, input().split())) # 목표 온도
X = list(map(int, input().split())) # 온도 변화 값
# 모든 i에 대해서 온도가 한 번에 조절되는게 핵심
answer = 0
for i in range(N) :
diff = A[i] - B[i]
if diff < 0 :
diff = -diff
count = diff // X[i]
if i == 0 :
even = count % 2
if (diff % X[i] == 0) and even == (count % 2) :
answer = max(answer, diff // X[i])
else :
answer = -1
break
print(answer)
728x90