티스토리 뷰
답이 나오지 않아서 살펴보니 사탕을 나눠주는 과정을 잘못 생각했다.
(왼쪽 친구에게 받은 사탕의 절반 + 원래 갖고 있던 사탕)의 절반을 오른쪽에 주는 것이 아니라.
원래 갖고 있던 사탕의 절반을 오른쪽으로 주고 난 후, 한 회전을 다 돌고 난 후 받은 사탕의 갯수까지 세는 것이다.
또한 리스트 내의 모든 요소가 같은 값을 가지는지 확인하는 방법은, 리스트를 set에 넣어서 길이가 1인지 살펴보면 된다.
T = int(input())
for _ in range(T):
N = int(input()) # 아이들의 인원
candy = list(map(int, input().split()))
cnt = 0
while True:
# 처음부터 홀수 개의 사탕을 가지고 있으면 선생님이 1개씩 보충 해준다.
for i in range(N):
if candy[i] % 2 != 0:
candy[i] += 1
if min(candy) == max(candy):
# if len(set(candy)) == 1:
print(cnt)
break
else:
cnt += 1
next_candy = [0]*N
for i in range(N):
if candy[i] % 2 != 0:
candy[i] += 1 # 홀수 개인 경우 선생님이 보충 해준다.
candy[i] //= 2
next_candy[(i+1)%N] = candy[i]
for i in range(N):
candy[i] += next_candy[i]
함수로 풀어보기
def check(N, candy):
for i in range(N):
if candy[i] % 2 == 1:
candy[i] += 1
return len(set(candy)) == 1
def teacher(N, candy):
next_candy = [0] * N
# 오른쪽 친구한테 사탕 분배
for i in range(N):
if candy[i] % 2 == 1:
candy[i] += 1
candy[i] //= 2
next_candy[(i+1)%N] = candy[i]
# 분배받은 사탕 더하기
for i in range(N):
candy[i] += next_candy[i]
return candy
def process():
N = int(input())
candy = list(map(int, input().split()))
cnt = 0
while not check(N, candy):
cnt += 1
candy = teacher(N, candy)
print(cnt)
for i in range(int(input())):
process()
'코딩테스트 > 백준' 카테고리의 다른 글
[BJ] 17478. 재귀함수가뭔가요 (0) | 2021.02.01 |
---|---|
[백준] 16769: Mixing Milk (0) | 2020.11.15 |
[백준] 17224: APC는 왜 서브태스크 대회가 되었을까? (0) | 2020.11.15 |
[백준] 16165번: 걸그룹 마스터 준석이 (0) | 2020.11.15 |
[백준] 1920번: 수 찾기 (0) | 2020.11.15 |
댓글