Algorithm
[파이썬] 백준 9037번: The candy war
bbomi
2023. 12. 16. 14:40
https://www.acmicpc.net/problem/9037
9037번: The candy war
입력은 표준입력(standard input)을 통해 받아들인다. 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 각각의 테스트 케이스의 첫 줄에는 아이의 인원 N (1 ≤ N ≤ 10)이 주어지고 그 다음 줄에
www.acmicpc.net
from collections import deque
def check(candy):
if candy % 2 != 0:
candy += 1
return candy
def solution(n, new_c):
cnt = 0
if n == 1:
return 0
if len(set(new_c)) == 1:
return 0
while len(set(new_c)) != 1:
to_give = [x//2 for x in new_c]
after_half = deque(to_give)
after_half.rotate(1)
after_give = [x+y for x, y in zip(to_give, after_half)]
after_check = [check(x) for x in after_give]
new_c = after_check
cnt += 1
return cnt
for _ in range(int(input())):
t = int(input())
n = list(map(int, input().split()))
new_c = [check(x) for x in n]
print(solution(n, new_c))
1. 캔디가 홀수일 경우, 해당 캔디를 가진 아이에게 하나를 더 주는 (+=1) check 함수를 생성합니다.
2. 만약 아이가 혼자거나 캔디를 줬을때, 모든 캔디가 같으면 그대로 0을 출력합니다.
3. 그게 아니라면, 전체 캔디 수가 같아질 때까지 while문을 돌립니다.
- 캔디를 반으로 나눈 값을 가진 list를 생성합니다.
- deque의 rotate를 사용하여 해당 캔디를 오른쪽으로 넘겨주게끔 구현합니다.
- (예: 반으로 나눈 후의 캔디가 [1, 2, 2, 4, 6] 일 경우, 여기에 오른쪽으로 rotate 1을 한 [6, 1, 2, 2, 4]를 더해주면 오른쪽으로 캔디를 준 것이 됩니다.)
- 받은 후의 캔디가 홀수일 경우, check 함수를 통해 +1을 해줍니다. 그리고 cnt += 1을 해줍니다.
- 최종적으로 cnt값을 출력합니다.