[Python][Queue]피자굽기

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
for t in range(int(input())):
    n, m = list(map(int, input().split()))
    tmp = list(map(int, input().split()))
    cheese = []
    for i in range(m):
        cheese.append([i+1, tmp[i]]) # 피자 넘버를 기억하기 위해서 인덱스와 데이터값을 같이 저장

    # 초기화
    cQ = []
    for i in range(n):
        cQ.append(cheese.pop(0))

    idx = 0
    while True:
        cQ[idx][1] = cQ[idx][1] // 2
        if cQ[idx][1] == 0:
            pizza_number = cQ[idx][0]
            if len(cheese) > 0:
                cQ[idx] = cheese.pop(0)
        idx = (idx + 1) % n
        if sum(i[1] for i in cQ) == 0: break # 피자 치즈가 하나도 안남아있을 때 탈출

    print("#{} {}".format(t+1, pizza_number))
5099. [파이썬 S/W 문제해결 기본] 6일차 - 피자 굽기 기본아이디어: 화덕을 확인하는게 1로 고정되어있지만, 알고리즘상에서는 idx가 계속 바뀌면서 확인하고 확인할 때마다 한바퀴 도는 것으로 생각해서 값이 절반으로 줄어든다.

댓글

이 블로그의 인기 게시물

[python]섬의 둘레구하기

백트래킹으로 부분집합구하기(Get Powerset usiing Backtracking)

[패턴매칭][Python]보이어 무어 알고리즘