난이도 : D3
문제번호 : 5099
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
N개의 피자를 동시에 구울 수 있는 화덕이 있다. 피자는 치즈가 모두 녹으면 화덕에서 꺼내며, 치즈의 양은 피자마다 다르다. - 피자는 1번위치에서 넣거나 뺄 수 있다. |
입력
첫 줄에 테스트 케이스 개수 T가 주어진다. 1<=T<=50 |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 번호를 출력한다. |
예시
입력 | 출력 |
3 |
#1 4 #2 8 #3 6 |
2. 문제풀이
문제를 꼼꼼히 다시 읽어보는 계기가 된 문제였다. 최대로 넣을 수 있는 크기가 있는데 문제를 대충 봐서 큐 전체를 돌리며 계산했다.
치즈양과 인덱스를 묶어서 리스트를 생성하고 화덕에 넣을 수 있는 양만큼의 리스트를 분리하고 남은 피자리스트를 가지고 있는다. 큐를 돌리면서 치즈의 양을 줄이고 치즈가 0이되면 남은 피자리스트에 있는 피자를 가져와 넣는다. 원소가 1개남을때까지 반복하며 남은 피자의 인덱스를 출력한다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#D3 5099 피자굽기
for t in range(1, int(input()) + 1):
#N개의 피자를 동시에 구울 수 있는 화덕
#M개의 피자를 구워야 함
N, M = map(int, input().split())
temp = input().split()
#인덱스랑 합쳐서 만들기
pizza = [(i+1, int(temp[i])) for i in range(M)]
#화덕에 들어갈 피자
pizzas = pizza[:N]
#화덕에 못들어간 피자
pizza = pizza[N:]
#피자가 1개남을때까지 반복
while len(pizzas) != 1:
#피자를 꺼내서 치즈를 반절로 줄이고
num, cheese = pizzas.pop(0)
cheese //=2
#치즈가 있다면 다시 넣는다.
if cheese: pizzas.append((num, cheese))
#치즈가 없다면 대기중인 피자를 넣어준다,
else :
if pizza : pizzas.append(pizza.pop(0))
print('#{} {}'.format(t, pizzas.pop()[0]))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
미로의 거리 Python(SW Expert Academy) (0) | 2020.03.31 |
---|---|
노드의 거리 Python(SW Expert Academy) (0) | 2020.03.30 |
회전 Python(SW Expert Academy) (0) | 2020.03.28 |
늘어지는 소리 Python(SW Expert Academy) (0) | 2020.03.27 |
재미있는 오셀로 게임 Python(SW Expert Academy) (0) | 2020.03.26 |
댓글