-
[CodeTree/Python] 용량이 다른 3개의 물통Solve 2024. 6. 26. 00:50
문제
더보기용량이 다른 3개의 물통
물을 담을 수 있고 각각 용량이 다른 물통 3개가 있습니다. 각 물통마다 담을 수 있는 최대 용량과 원래 담겨 있던 물의 양이 주어지고, 1번 물통에서 2번 물통으로, 2번 물통에서 3번 물통으로, 3번 물통에서 다시 1번 물통으로 내용물을 옮겨 담는 작업을 100번 진행했을 때, 각 물통에 들어있는 내용물의 양을 구하는 프로그램을 작성해보세요.
입력 형식
3개의 줄에 걸쳐 한 줄에 하나씩 각 물통의 용량과 물통에 들어있던 내용물이 공백을 사이에 두고 주어집니다.
- 1 ≤ 물의 용량 ≤ 1,000,000,000
출력 형식
1 → 2, 2 → 3, 3 → 1 순서로 옮겨담는 작업을 100번 반복한 이후의 결과를 3개의 줄에 걸쳐 출력합니다.
첫 번째 줄에는 1번 물통에 남아있는 물의 양을 출력합니다.
두 번째 줄에는 2번 물통에 남아있는 물의 양을 출력합니다.
세 번째 줄에는 3번 물통에 남아있는 물의 양을 출력합니다.
풀이
storage = [] water = [] count = 0 for _ in range(3): s, w = map(int, input().split()) storage.append(s) water.append(w) # 1 → 2, 2 → 3, 3 → 1 순서로 물을 옮기는 작업을 100번 반복 while (True): # 1번 물통에서 2번 물통으로 물 옮기기 if water[0] + water[1] >= storage[1]: move = storage[1] - water[1] else: move = water[0] water[0] -= move water[1] += move count += 1 if count == 100: break # 2번 물통에서 3번 물통으로 물 옮기기 if water[1] + water[2] >= storage[2]: move = storage[2] - water[2] else: move = water[1] water[1] -= move water[2] += move count += 1 if count == 100: break # 3번 물통에서 1번 물통으로 물 옮기기 if water[2] + water[0] >= storage[0]: move = storage[0] - water[0] else: move = water[2] water[2] -= move water[0] += move count += 1 if count == 100: break # 결과 출력 print(water[0]) print(water[1]) print(water[2])
생각나는 대로 짰더니 엄청 너저분하게 짠 것 같다. (맞았으니 됐다) 100회 반복인데 암만 풀어도 맞게 푼 것 같은데 정답이 안 나와서 너무너무 화났는데 토론 탭 들어가니 비슷한 문제로 고민 중인 사람이 있었다. "1->2, 2->3, 3->1" 한 세트를 100회 반복하는 건 줄 알았더니만 "1->2" 이 각각의 작업을 1회차로 보는 거였다.
구현에 대한 내용은 보면 알 것 같아서 패스합니당.. 각각 작업마다 카운트를 걸어주고 100이 되는 순간 반복문을 빠져나오게 했다.
'Solve' 카테고리의 다른 글
[BOJ/Python] 백준 2563 - 색종이 (0) 2024.06.26 [BOJ/Python] 백준 1541 - 잃어버린 괄호 (0) 2024.06.26 [CodeTree/Python] n * m 표 이동 7 (미해결) (0) 2024.06.25 [CodeTree/Python] 개발자의 컴퓨터 (0) 2024.06.25 [CodeTree/Python] Cycle (0) 2024.06.25