Post
단어 뒤집기 2(백준 17413번) | Gihun Son

단어 뒤집기 2(백준 17413번)

💡 **Check Point !

( 해당사항 ✓체크 )

  1. 막힘 없이 수월하게 풀린 문제인가?

  2. 1시간이내로 풀렸던 문제인가?✓

  3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?

  4. 시간을 써도 도무지 풀 수 없는 문제인가?

  5. 솔루션을 찾아봤는가?


난이도 체감

  1. 최상

  2. 중✓


이해도

  1. 완벽히 이해✓

  2. 다소 헷갈리는 부분들이 있음

  3. 이해 못함

문제

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.

먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.

  1. 알파벳 소문자(‘a’-‘z’), 숫자(‘0’-‘9’), 공백(‘ ``’), 특수 문자(‘<’, ‘>‘)로만 이루어져 있다.
  2. 문자열의 시작과 끝은 공백이 아니다.
  3. <‘와 ‘>‘가 문자열에 있는 경우 번갈아가면서 등장하며, ‘<‘이 먼저 등장한다. 또, 두 문자의 개수는 같다.

태그는 ‘<‘로 시작해서 ‘>‘로 끝나는 길이가 3 이상인 부분 문자열이고, ‘<‘와 ‘>‘ 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.

Untitled

Untitled 1

나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from collections import deque
import sys

S=sys.stdin.readline().strip()
S_q=deque(S)
answer=deque()
while S_q:
    cur=S_q.popleft()
    if cur=='<':
        while cur!='>':
            answer.append(cur)
            cur=S_q.popleft()
        answer.append(cur)
    else:
        tmp_q=deque()
        while S_q and S_q[0]!=' ' and S_q[0]!='<':
            tmp_q.append(cur)
            cur=S_q.popleft()
        tmp_q.append(cur)
        while tmp_q:
            answer.append(tmp_q.pop())
        if S_q and S_q[0]==' ':
            answer.append(S_q.popleft())
for ans in answer:
    print(ans,end='')
print('')
  • deque()를 사용하여 문제를 풀이하였다.
  • 처음 들어오는 문자가 ‘<’라면, ‘>’가 나올 때까지 그대로 정답지인 answer에 넣어주었다.
  • 만약 ‘<’가 아니라면, 태그가 아닌 단어라는 뜻이므로, ‘ ‘(공백)이 나오거나 ‘<’이 나올 때까지 임지 저장 deque()tmp_q에 저장하고, 뒤집어서 정답지에 넣어주었다.
This post is licensed under CC BY 4.0 by the author.