단어 뒤집기 2(백준 17413번)
💡 **Check Point !
( 해당사항 ✓체크 )
막힘 없이 수월하게 풀린 문제인가?
1시간이내로 풀렸던 문제인가?✓
1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
시간을 써도 도무지 풀 수 없는 문제인가?
솔루션을 찾아봤는가?
난이도 체감
최상
상
중✓
하
이해도
완벽히 이해✓
다소 헷갈리는 부분들이 있음
이해 못함
문제
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
- 알파벳 소문자(‘
a
’-‘z
’), 숫자(‘0
’-‘9
’), 공백(‘ ``’), 특수 문자(‘<
’, ‘>
‘)로만 이루어져 있다. - 문자열의 시작과 끝은 공백이 아니다.
- ’
<
‘와 ‘>
‘가 문자열에 있는 경우 번갈아가면서 등장하며, ‘<
‘이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 ‘<
‘로 시작해서 ‘>
‘로 끝나는 길이가 3 이상인 부분 문자열이고, ‘<
‘와 ‘>
‘ 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
나의 풀이
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.