본문 바로가기
전공 관련/알고리즘

백준 18115

by 현댕5697 2021. 4. 26.
반응형

이 문제는 deque을 사용하여 푸는 문제였다.

문제 풀이의 핵심은 주어진 input에 대해 역순으로 확인하며 deque에 카드번호를 집어넣는 것이다.

 

예를 들어 input이 

5

2 2 1 3 2 1

이렇게 주어졌다면 

1 → 2 → 3 → 1 → 2 → 2

순서로 값을 읽고, 각 숫자에 해당하는 과정을 해주면 된다.

 

카드 숫자는 1부터 N까지 수행을 할 때마다  1씩 증가한다.

1의 경우:

제일 앞에 카드가 들어가므로 deque.appendleft()를 사용해주었다.

2의 경우:

1. 앞에서 두 번째에 카드가 들어가야 하기 때문에 deque.popleft()를 이용하여 제일 앞의 카드를 빼네준다.

2. 카드를 deque.appendleft()를 이용해 넣는다.

3. 빼낸 카드를 deque.appendleft()를 이용해 다시 제일 앞에 넣어준다.

3의 경우:

deque.append()를 이용하여 제일 뒤에 넣어준다.

 

예시코드

import sys
from collections import deque

N = int(sys.stdin.readline())
data = list(map(int, sys.stdin.readline().split()))

res = deque()

card_num = 1
for i in range(N):
    if(data[N-1-i] == 1):
        res.appendleft(card_num)
    elif(data[N-1-i] == 2):
        a = res.popleft()
        res.appendleft(card_num)
        res.appendleft(a)
    else:
        res.append(card_num)
    card_num = card_num + 1

for i in res:
    print(i, end=' ')
반응형

'전공 관련 > 알고리즘' 카테고리의 다른 글

백준 2504  (0) 2022.09.18
시간복잡도 정리  (1) 2021.09.08
백준 2109  (0) 2021.05.02
백준 9663  (0) 2021.05.02
백준 2493  (0) 2021.04.26

댓글