본문 바로가기

Algorithm & Data Structure

백준 - 2161번(큐)

728x90
반응형

https://www.acmicpc.net/problem/2161

 

2161번: 카드1

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

1번 방법

import sys
from collections import deque

n = int(sys.stdin.readline())
if n == 1: #n이 1일때 popleft가 이루어진 시점에서 이미 조건문을 만족하지 못하기에 따로 하드코딩 한다.
    print(1) 
else:
    arr = deque([i for i in range(1, n + 1)]) #카드를 deque에 삽입
    ans = []
    while 1:
        ans.append(arr.popleft())
        if len(arr) == 1: #카드가 한장만 남으면 종료해야 한다.
            ans.append(arr.pop())
            break
        arr.append(arr.popleft())

    print(*ans)

 

2번 방법

import sys
from collections import deque

n = int(sys.stdin.readline())

arr = deque([i for i in range(1, n + 1)])

while 1:
    print(arr.popleft(), end=' ') #버리는 것 들을 바로 출력
    if len(arr) == 0: # 카드가 더이상 남아 있지 않으면 종료
        break
    arr.append(arr.popleft()) #가장 위에것을 가장 밑으로

 

2번 방법이 큐로 푸는 풀이의 정석이고 1번 풀이는 답을 알고 거기에 맞춰 가는 풀이다.

실행 속도는 1번이 미세하게 빠르고 실제로 처음 아이디어가 떠오른 것도 이거였으나 아무래도 하드코딩도 필요하고 리스트도 추가로 필요하기 때문에 추천할만한 풀이는 아닌 것 같다.

1번 풀이의 유의점은 정답 출력 조건에 맞게 한줄에 출력해야 하기 때문에 end=' '를 적어주는 것을 잊지 않는 것이다.

728x90
반응형

'Algorithm & Data Structure' 카테고리의 다른 글

백준 - 2178번(BFS)  (0) 2022.04.09
백준 - 2606번(DFS,BFS)  (0) 2022.04.09
백준 - 10845번(큐)  (0) 2022.04.01
백준 - 3190번(큐)  (0) 2022.04.01
백준 - 1107번(전체탐색)  (0) 2022.03.31