알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
문자열의 시작과 끝은 공백이 아니다.
'<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
일단, reverse를 사용해야 하는 것은 알겠는데.. 아직까지 파이썬으로 리스트를 만든다거나 배열을 사용하는 부분에 있어서 감이 잘 안온다. 따라하는 것에만 치우쳐져 있었던 것 같다.
밑의 코드는 다른 분들이 풀어놓으신 솔루션을 참고해서 작성했다.
해결방안
# Solution 1
import sys
s = list(map(str, sys.stdin.readline().strip()))
res = ""
word = ""
reverse = True
for i in s:
if i == '<':
reverse = False
res += word
word = i
elif i == '>':
reverse = True
res += (word + '>')
word = ""
elif i == ' ':
res += word + i
word = ""
elif reverse:
word = i + word
else:
word += i
res += word
print(res)
우선 먼저 첫번째 부분을 살펴보자
import sys
s = list(map(str, sys.stdin.readline().strip()))
여기서 s는 입력값들을 readline()으로 읽어서 map안에 하나씩 담기게 된다.
공백도 동일하게 담긴다.
for i in s:
if i == '<': # 괄호 < 를 만나면
reverse = False # reverse 하지 않음
res += word # res에 word를 추가
word = i # word는 < 가 됨
elif i == '>': # 괄호 > 를 만나면
reverse = True # reverse는 true 상태가 됨
res += (word + '>') # res에는 word와 >이 들어감
word = "" # word는 다시 공백
elif i == ' ': # 띄어쓰기를 만나면
res += word + i # res는 word와 띄어쓰기를 더한 값
word = "" # word는 공백
elif reverse: # reverse일 때
word = i + word # word는 reverse를 한 값
else: # 그 외의 경우 (문자나 숫자)
word += i # word에 현재 값를 추가함