코테분석#5-4 매개변수의 이해와 구조화 문제풀이1- The candy war (백준 9037)

정은경·2020년 2월 25일
0

알고리즘

목록 보기
13/125

문제


나의 풀이

import sys

case_num = int(sys.stdin.readline().strip())

for i in range(0, case_num):
    kids = int(sys.stdin.readline().strip())
    candies = [int(x) for x in sys.stdin.readline().strip().split()]

    is_not_same = True
    count = 0
    while is_not_same:
        # print(count)
        # print("yea")
        sent_candies = []
        left_candies = []

        if kids <= 1:
            count = 0
            break

        for i in range(0,kids):
            if candies[i]%2 != 0:
                candies[i] += 1

        prev = candies[0]
        is_same = True
        for i in candies:
            if prev != i:
                is_same = False
            prev = i
        if is_same:
            break

        for i in range(0, kids):
            sent_candies.append(candies[i]//2)
            left_candies.append(candies[i]-sent_candies[i])

        # print(sent_candies)
        add_candies = []
        add_candies = sent_candies[:-1]
        add_candies.insert(0, sent_candies[-1])
        # print(add_candies)

        rlt = []
        for i in range(0, kids):
            hoho = left_candies[i] + add_candies[i]
            rlt.append(hoho if hoho % 2 == 0 else (hoho + 1))

        count += 1

        prev = rlt[0]
        is_same = True
        for i in rlt:
            # print("hohoho")
            if prev != i:
                is_same = False
            prev = i
        if is_same:
            break
        candies = rlt

    # print("haha")
    print(count)

쌤's 풀이

문제 포인트 파악하기

  • N의 범위가 1~10으로 크기가 앉기 때문에 단순 구현 문제임!
  • 사탕의 수(C)가 30이하로 크지 않기 때문에 문제 조건만 잘 맞추면 맞출 수 있는 문제임
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):
    tmp_list = [0 for i in range(N)]

    for idx in range(N):
        if candy[idx] % 2:
            candy[idx] += 1
        candy[idx] //= 2
        
        # 이 부분이 포인트! 익숙해지자!
        # (0+1)%5 => 1
        # (1+1)%5 => 2
        # (4+1)%5 => 0
        tmp_list[(idx + 1) % N] = candy[idx]

    for idx in range(N):
        candy[idx] += tmp_list[idx]
        
    return candy


def process():
    N, candy = int(input()), 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()
profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글