본문 바로가기

알고리즘/백준 (Pyhthon)

[알고리즘] 백준 9037 The candy war / python

https://www.acmicpc.net/problem/9037

 

9037번: The candy war

입력은 표준입력(standard input)을 통해 받아들인다. 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 각각의 테스트 케이스의 첫 줄에는 아이의 인원 N (1 ≤ N ≤ 10)이 주어지고 그 다음 줄에는 각 아이들이 초기에 가지고 있는 사탕의 개수 Ci ( 1 ≤ i ≤ N, 1 ≤ Ci ≤ 30)가 주어진다. 분배 시 C1의 오른쪽에는 C2가, C2의 오른쪽에는 C3가…… 같은 식으로 앉게 되며 CN의 오른쪽에는 C1이 앉게 된다.

www.acmicpc.net

 

def check(N, C):
    for i in range(N):
        if C[i] %2 == 1:
            C[i] += 1
    return len(set(C)) == 1    # True 또는 False

def share(N, C):
    temp = [0] * N
    for i in range(N):
        if C[i] % 2 == 1:
            C[i] += 1
        C[i] //= 2
        temp[(i+1) % N] += C[i]

    for j in range(N):
        C[j] += temp[j]

def func():
    N, C = int(input()), list(map(int, input().split()))
    count = 0
    while not check(N, C):
        share(N, C)
        count += 1
    print(count)

T = int(input())
for _ in range(T):
    func()
func함수 안에서
처음 순환을 시작할때 홀수인지를 체크하는 check함수와
사탕의 반을 오른쪽에 앉은 아이에게 주는 share함수를 부른다