


문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.
첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.
태그 안에 있는 문자열은 그대로 출력, 밖에 있는 문자열은 공백을 기준으로 뒤집어서 출력해야 하므로 조건을 잘 따져봐야한다.
(조건 1)
태그 안에 있는지 먼저 확인하기 위해 '<'가 입력되면 tag_flag 변수를 사용해서 tag_flag가 True로 변경하고 '>'가 입력되면 tag_flag를 False로 변경하면서 temp안에 들어있는 문자열을 그대로 ans에 더하고 초기화.
(조건 2)
'<'가 입력되었을때 temp안에 문자열이 들어있다면 문자열을 반전하고 ans에 더해준 후, 초기화.
(조건 3)
tag_flag가 False이면서 ' '(공백)이 입력되면 temp 안에 있는 문자열을 반전하고 ans에 더해주고 초기화. 이후, ans에 ' '(공백)도 더해준다.
(조건 4)
for 문이 끝났을 때 temp안에 문자열이 남아있다면 반전 후 ans에 더해준다. (마지막 문자가 '>'라면 for 문 안에서 더해진 상태이기 때문)
s = input()
temp = ''
ans = ''
tag_flag = False
for word in s:
if word == '<': # 조건 1, 2
if temp:
ans += temp[::-1]
temp = ''
temp += word
tag_flag = True
elif word == '>': # 조건 1
temp += word
ans += temp
temp = ''
tag_flag = False
else:
if tag_flag:
temp += (word)
else:
if word == ' ': # 조건 3
ans += temp[::-1] + word
temp = ''
else:
temp += word
if temp: # 조건 4
ans += temp[::-1]
print(ans)
조건을 하나하나 따져보면서 구현하면 그리 어렵지 않은 문제인것 같다. 굳이 Stack의 개념을 사용하지 않아도 풀 수 있었던 문제.
https://www.acmicpc.net/problem/17413