백준 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는 “아직 출력되지 않은 문자열 조각”을 의미한다.


어려웠던 부분

  1. 태그 안/밖 상태를 정확히 유지하는 것
  2. 단어의 끝 시점을 판단하는 것
  3. 뒤집어야 하는 순간과 그대로 두어야 하는 순간을 구분하는 것
  4. 특히 < 를 만났을 때, 이전에 모아둔 단어를 먼저 처리해야 한다는 점과 문자열이 끝났을 때 temp에 남아 있는 단어를 한 번 더 처리해야 한다는 점을 유의하자.