Algorithm/Problems

99클럽 코테 스터디 15일차 TIL + 그리디

공부좀하시졍 2024. 11. 12. 00:22

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

from collections import deque
import sys
input = sys.stdin.readline

t = int(input())

for _ in range(t):
    n = int(input())
    cards = list(map(str, input().split()))
    que = deque(cards[0])
    word = cards[0]

    for i in range(1, n):
        if word >= cards[i]: # word가 더 뒷 순서
            que.appendleft(cards[i])
            word = cards[i] # 비교해줄 단어 , 제일 왼쪽에 위치
        else:
            que.append(cards[i])
    print(''.join(que))
  • 처음 비교해줄 기준 문자 (가장 왼쪽에 위치)를 que에 넣고 하나씩 비교해준다.
  • 기준 문자가 다음에 나오는 문자 카드보다 뒤에 위치한다면 (첫번째 if문) appendleft() 함수를 이용해 기준 문자 왼쪽에 추가한다.
  • 기준 문자가 다음에 나오는 문자 카드보다 앞에 위치한다면, append()함수로 오른쪽에 추가한다.
  • 이때 deque에 있는 appendleft, append함수를 써주기 위해 deque를 선언해주었다.
    • appendleft: 왼쪽 끝에 새로운 원소 삽입
    • append: 오른쪽 끝에 새로운 원소 삽입
    • pop: 오른쪽 끝의 원소를 제거 후 반환
    • popleft: 왼쪽 끝의 원소를 제거 후 반환
  • join 함수를 이용해 문자열을 합쳐주었다.
    • '문자열을 이어주는 문자'.join(리스트)