문제
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
- 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
- 문자열의 시작과 끝은 공백이 아니다.
- '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
입력
첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.
출력
첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.
예제입력1
baekjoon online judge
예제출력1
noojkeab enilno egduj
예제입력2
<open>tag<close>
예제출력2
<open>gat<close>
예제입력3
<ab cd>ef gh<ij kl>
예제출력3
<ab cd>fe hg<ij kl>
예제입력4
one1 two2 three3 4fourr 5five 6six
예제출력4
1eno 2owt 3eerht rruof4 evif5 xis6
예제입력5
<int><max>2147483647<long long><max>9223372036854775807
예제출력5
<int><max>7463847412<long long><max>7085774586302733229
예제입력6
<problem>17413<is hardest>problem ever<end>
예제출력6
<problem>31471<is hardest>melborp reve<end>
문제풀이
먼저 설계를 해보자.
문자열 s를 입력받는다.
이제 s를 정렬해야하는것이다. <>태그 안에 있는 문자열은 그대로, <>태그 밖의 문자열은 reverse해서 출력한다. <>태그 밖의 문자열은 공백을 기준으로 reverse한다.
for문 range(len(s))안에서
1. 일단 문자열은 temp에 다 넣는다고 가정한다. 이제 조건문을 작성해보자 허나 조건이 있다.
2. ">"가 입력되면 temp에 ">"를 append하고 그 전까지 temp에 넣은 문자열을 그대로 answer에 append한다. temp는 초기화한다.
3. "<"가 입력되면(temp가 True인 경우이다, Temp가 False면 그냥 temp에 "<"append하고 끝) 그 전까지 temp에 넣어진 문자열을 reverse하고 answer에 append한다. 그리고 temp는 "<"로 초기화
4. " "가 입력되면(하지만 temp안에 "<"가 없어야함) 그 전까지의 temp를 reverse해서 answer에 append하고 " "도 append한다. temp는 초기화
5. 이제 나머지 문자열은 temp에 append한다.
이제 마지막 비어있는 temp를 reverse하여 answer에 append한다.
마지막으로 answer을 문자열로 print한다.
정답
s = input()
temp = []
answer = []
for i in range(len(s)):
# 닫힌 괄호가 나오면
if s[i] == '>':
temp.append('>')
# 그대로 최종 리스트에 추가
answer.append(''.join(temp))
# 임시 리스트 초기화
temp = []
# 열린 괄호가 나왔는데 이전에 입력된 것들이 있다면
elif s[i] == '<' and temp:
# 임시 리스트를 뒤집어서 추가
temp.reverse()
answer.append(''.join(temp))
# 임시 리스트 초기화
temp = ["<"]
# 공백 문자인데 괄호 밖이라면
elif s[i] == ' ' and '<' not in temp:
# 임시 리스트 뒤집어서 추가
temp.reverse()
answer.append(''.join(temp))
answer.append(' ')
# 임시 변수 초기화
temp = []
else:
temp.append(s[i])
# 아직 임시 변수에 문자열이 남아있다면 뒤집어서 추가
if temp:
temp.reverse()
answer.append(''.join(temp))
# 문자열로 반환
print(''.join(answer))