백준 17413번 - 단어 뒤집기2
단어 뒤집기 2 문제 바로 가기
풀이 코드
s = input()
words = []
temp = ""
tag = False
for i in s:
if i == '<':
if temp:
words.append(temp[::-1])
temp = ""
tag = True
temp += i
elif i == '>':
temp += i
words.append(temp)
temp = ""
tag = False
elif tag:
temp+=i
else:
if i == ' ':
words.append(temp[::-1])
words.append(' ')
temp = ""
else:
temp+=i
if temp:
if tag:
words.append(temp)
else:
words.append(temp[::-1])
print(''.join(words))
해결 전략:
1) tag : 지금 < > 안인가?
- tag = True → < … > 안 → 절대 뒤집지 않음
- tag = False → 밖 → 단어만 뒤집음(공백 기준)
2) temp : “현재 모으는 것”
- 태그 밖이면: 단어를 모으는 중 (baekjoon 같은)
- 태그 안이면: 태그 전체를 모으는 중 (
같은)
3) words : 출력 조각들을 순서대로 저장
- 마지막에 ‘‘.join(words)로 한 번에 출력
임시 저장 변수(temp)의 의미와 필요성
입력은 한 글자씩 처리되기 때문에, 단어가 언제 끝나는지는 공백을 만나기 전까지 알 수 없다.
그래서 아직 출력할 수 없는 문자들을 임시로 저장할 공간이 필요하고,
그 역할을 하는 것이 temp이다.
태그 밖에서는 temp에 문자를 모아 두었다가
공백이나 태그 시작을 만나면 뒤집어서 출력한다.
태그 안에서는 temp에 문자를 그대로 모아, 태그가 끝날 때 순서 그대로 출력한다.
temp는 “아직 출력되지 않은 문자열 조각”을 의미한다.
어려웠던 부분
- 태그 안/밖 상태를 정확히 유지하는 것
- 단어의 끝 시점을 판단하는 것
- 뒤집어야 하는 순간과 그대로 두어야 하는 순간을 구분하는 것
- 특히 < 를 만났을 때, 이전에 모아둔 단어를 먼저 처리해야 한다는 점과 문자열이 끝났을 때 temp에 남아 있는 단어를 한 번 더 처리해야 한다는 점을 유의하자.