문제풀이/백준(Boj) 문제풀이

[백준][파이썬] - 13417. 카드 문자열(파이썬/python)

얄루몬 2022. 7. 18. 16:50

from collections import deque

for _ in range(int(input())):
    n = int(input())
    s = input().split()

    dq = deque(s)
    res = deque(dq.popleft())
    while dq:
        now = dq.popleft()
        if now > res[0]:
            res.append(now)
        else:
            res.appendleft(now)
    print("".join(res))
  • A가 대문자 중 가장 작은 문자라고 한다면 현재 문자와 앞에 제일 앞에 담겨있는 문자 중 더 큰 값은 뒤로 보내고 현재 res 안에 제일 작은 문자는 제일 앞으로 보낸다. 
  • 두 개의 덱 자료구조를 쓰는 이유는 간단하다.(둘 다 모두 덱으로 진행해야 한다. 리스트의 경우엔 popleft, appendleft 사용 불가!)
    • 해당 자료를 빼야 할 덱의 경우는 popleft를 해주기 위함이다.
    • 해당 자료를 빼서 맞는 자리로 넣어 결과값으로 출력해줄 res의 경우엔 해당 res[0] 맨 앞에 있는 값보다 현재 비교하는 값이 작을 때 appendleft() 해주어야 하기 때문이다.