https://www.acmicpc.net/problem/9037
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값을 출력합니다.
'Algorithm' 카테고리의 다른 글
[파이썬] 백준 2839번: 설탕 배달 (0) | 2024.01.03 |
---|---|
[파이썬] 백준 17269번: 이름궁합 테스트 (0) | 2023.12.25 |
[파이썬] 백준 1072번: 게임 (0) | 2023.12.12 |
[파이썬] 백준 1157번: 단어 공부 (0) | 2023.11.26 |
[파이썬] 백준 1436번: 영화감독 숌 (0) | 2023.11.21 |