먼저 들어온 값을 앞에서 꺼내요
스택에서 pop의 의미를 배웠어요. queue.pop(0)은 0번 칸의 값을 제거하고 반환해요. 뒤의 값은 앞으로 한 칸씩 옮겨요.
queue = [4, 7, 2]
first = queue.pop(0)
first는 4, queue는 [7, 2]예요. 먼저 들어온 항목을 먼저 처리하는 순서를 큐라고 해요. queue.append(first)까지 실행하면 [7, 2, 4]가 되어 처리 대신 뒤로 이동해요. 그림은 앞의 4를 뒤로 옮긴 상태예요.
while은 조건이 맞는 동안 반복해요
for는 정해진 값을 순회했어요. while 조건:은 조건이 맞는 동안 반복해요. 남은 명령 수를 줄여서 멈추게 할 수 있어요.
remaining = 3
while remaining > 0:
command = int(input())
remaining = remaining - 1
입력을 세 번 읽으면 remaining은 0이 되어 종료돼요. 감소하는 코드가 없으면 계속 반복할 수 있어요. 큐가 비었다고 명령 입력을 건너뛰면 다음 명령과 줄의 대응이 깨지므로 명령은 항상 읽어요.
같은 꺼내기라도 명령의 역할이 달라요
명령 0은 앞의 항목을 처리해 없애요. 명령 1은 앞의 항목을 꺼냈다가 뒤에 넣어요. 예제 queue =[4, 7, 2]에서 명령 1을 적용하면[7, 2, 4], 그 뒤 0이면 처리 값 7이고 queue는[2, 4]예요.
처리한 값은 result 리스트에 추가해 나중에 순서대로 출력해요. 비었을 때는 두 명령 모두 그대로 넘겨요. len으로 빈 상태를 먼저 확인해요.
직접 풀어봐요
큐의대기값과 명령을 읽어요. 명령 0이면 앞 값을 처리해 결과에 남기고, 1이면 앞 값을 맨 뒤로 옮겨요. 빈큐에서는 두 명령 모두 무시해요. 처리한 값을 처리 순서로 출력해요.
첫 줄 n(020), 다음 n 줄에 대기 값(11000), 다음 줄 m(0~100), 이후 m 줄에 명령 0 또는 1이에요. 출력 첫 줄은 처리 개수, 이후 각 줄은 처리한 값이에요.
예시 1: queue =[4, 7, 2], 명령[1, 0, 0] → 출력 줄 2, 7, 2예요.
예시 2: queue =[5, 8], 명령[0, 1, 0] → 출력 줄 2, 5, 8예요.
예시 입력
3 4 7 2 3 1 0 0
예상 결과
2 7 2
예시 입력
2 5 8 3 0 1 0
예상 결과
2 5 8
핵심 개념
stack-queue: pop(0)과 append 로큐의처리·순환을 구분하고, while의 종료 상태를 갱신해요.