현제의 현재이야기

[백준/python] 18115 - 카드놓기 본문

algorithm

[백준/python] 18115 - 카드놓기

현재의 현제 2022. 7. 5. 17:04

from collections import deque

n = int(input())
teq = deque(map(int, input().split()))
card = [i for i in range(1, n + 1)]
card = deque(card)
result = deque()

while len(teq) != 0:
    teq_num = teq.pop()
    target = card.popleft()

    if teq_num == 1:
        result.appendleft(target)
    elif teq_num == 2:
        result.insert(1, target)
    else:
        result.append(target)

for i in result:
    print(i, end=' ')

| 알고리즘

1. 기술 리스트를 받고 기술 리스트를 뒤에서 부터 차례대로 pop.

2. 동시에 card 리스트 (만약 5개의 카드면 1, 2, 3, 4, 5)를 생성하고 맨앞을 pop. 왜냐하면 기술의 마지막은 마지막 차례대로 되어있는 카드의 가장 앞 카드이기 때문.

3. 그리고 기술 넘버에 따라서 1이면 카드를 가장 왼쪽에, 2면 맨 앞 옆에, 3이면 맨 오른쪽에 배치

 

즉 teq= [2, 3, 3, 2, 1] 이면 card = [1, 2, 3, 4, 5]

 

처음에 teq.pop()으로 1이 pop 되면 card.popleft() 의 1은 왼쪽으로

차례대로 시행하면

1 > 1, 2> 1, 2, 3> 1, 2, 3, 4 > 마지막 2가 5를 1옆으로 넣어서 1, 5, 2, 3, 4 완성.

 

몰랐던점: 덱은 appendleft도 되고 index가 안될 뿐이지 insert는 된다.

 

손코딩으로 처음 풀어봤는데 생각보다 코드 작성하고 푸는데는 엄청 빨리 걸렸다. 충분히 손코딩하면서 고민하고 코드를 짜야겠다.

Comments