티스토리 뷰
반응형
문제의 저작권은 SW Expert Academy에 있습니다.
파이썬 SW문제해결 기본 - Queue
문제
N개의 피자를 동시에 구울 수 있는 화덕이 있다. 피자는 치즈가 모두 녹으면 화덕에서 꺼낸다. 1번부터 M번까지 M개의 피자를 순서대로 화덕에 넣을 때, 치즈의 양에 따라 녹는 시간이 다르기 때문에 꺼내지는 순서는 바뀔 수 있다. 주어진 조건에 따라 피자를 구울 때, 화덕에 가장 마지막까지 남아있는 피자 번호를 알아내는 프로그램을 작성하시오.
해설
Queue 자체 라이브러리 보다 deque를 쓰는게 빠르다. 그러니 bfs 풀때는 deque를 아래 처럼 쓰자. 사실 지금 풀이는 여러수정을 거쳐서 좀 복잡하게 만들었다. 다음에 다시 풀어서 올리겠다.
우리가 구해야 하는것은 남은 치즈의 양이 아닌 피자의 번호이다. 기본적으로 접근은 치즈의 양을 deque에 넣는 것이 아닌 '치즈의 양이 적혀있는 list의 index'를 넣었다. 그래서 하나씩 빼서 인덱스 값에 맞는 값을 찾아가서 치즈의 양을 계산하고 0이 아닌 경우는 다시 넣고, 0이면 아직 들어가지 않은 피자를 넣었다.
이때 새로운 피자를 넣기 위해서 새로운 피자의 위치의 인덱스를 담고 있는 last라는 변수를 하나 설정해서 썼다.
import collections
TC = int(input())
for tc in range(1, TC+1):
N, M = map(int, input().split())
data_i = [i for i in range(M)]
data = list(map(int, input().split()))
deq = collections.deque()
last = N-1
while len(deq) < N:
a = data_i.pop(0)
deq.append(a)
if len(data_i) == 0:
break
while len(deq) >= 1:
idx_i = deq.popleft()
data[idx_i] = data[idx_i]//2
if data[idx_i] == 0:
last += 1
if last >= M:
continue
deq.append(last)
else:
deq.append(idx_i)
print("#%d %d"%(tc, idx_i+1))
반응형
'알고리즘 > sw' 카테고리의 다른 글
[SW Expert Academy] 5102번 노드의 거리 python (0) | 2020.04.20 |
---|---|
[SW Expert Academy] 5105번 미로의 거리 python (0) | 2020.04.16 |
[SW Expert Academy] 5097번 회전 python (0) | 2020.04.03 |
4881. [파이썬 S/W 문제해결 기본] 5일차 - 배열 최소 합_python (0) | 2020.03.29 |
4880. [파이썬 S/W 문제해결 기본] 5일차 - 토너먼트 카드게임_python (0) | 2020.03.29 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DFS
- pandas
- Deque
- Python
- vuejs
- useHistory 안됨
- TensorFlow
- react autoFocus
- useState
- read_csv
- nodejs
- nextjs autoFocus
- BFS
- 자연어처리
- 클라우데라
- 자료구조
- NextJS
- UserCreationForm
- error:0308010C:digital envelope routines::unsupported
- django
- Express
- mongoDB
- Queue
- login
- next.config.js
- logout
- JavaScript
- Vue
- react
- typescript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함