boj 15828 Router

apircity·2022년 8월 21일
0

boj

목록 보기
22/24
post-thumbnail

boj 15828 Router

참고한 글

how to solve

  • 라우터는 먼저 온 패킷부터 하나씩 처리한 후 버퍼에서 제거한다.
    → popleft로 제거
  • if 라우터가 패킷을 처리하는 속도 > 패킷이 들어오는 속도
    -> 버퍼 넘침 -> 버퍼에 공간이 생길 때까지 입력받는 패킷은 모두 버려짐
    → 첫 줄에 입력받은 N과 deque의 개수가 동일하면 삽입하지 않는다
  • 0은 라우터가 패킷 하나를 처리했다는 것을 의미 -> 버퍼가 비어있을 때는 0이 입력으로 들어오지 않음 *중요
    → deque의 개수가 0이 아닐 때 popleft로 제거

code

import sys
from collections import deque
N = int(sys.stdin.readline())
queue = deque()
while 1:
    n = int(sys.stdin.readline())
    if n == -1:
        break
    if n != 0 and len(queue) < N:
        queue.append(n)
    elif n == 0:
        queue.popleft()
if queue:
    print(*queue)
else: 
    print("empty")

소감

에제 입력을 했을 때 계속 큰 값은 정답이 나오지 않아 구글의 도움을 받았다
고쳐본 결과 코드가 너무 난잡해서 모든 경우를 처리하지 못하고 몇개가 얻어걸려서 맞은 것을 맞는 코드라고 오해하고 있었던 것이었다
앞으로 이런 문제를 풀때는 조건 하나하나 알고리즘을 세우고 차례차례 실행해보면서 어디가 틀렸는 지 천천히 찾아가며 푸는 습관을 가지도록 해야겠다

profile
junior developer

0개의 댓글