728x90

백준 17413 - 단어 뒤집기 2

시간 제한 1초, 메모리 제한 512MB

# 조건

  • 문자열 S가 주어졌을 떄, 이 문자열에서 단어만 뒤집으려고 한다.
  • 먼저, 문자열 S는 아래와 같은 규칙을 지킨다.
    1. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
    2. 문자열의 시작과 끝은 공백이 아니다.
    3. '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
  • 태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고,
  • '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다.
  • 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다.
  • 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.

입력

  • 첫째 줄에 문자열 S가 주어진다.
  • S의 길이는 100,000 이하이다.

출력

  • 첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.

# 접근 방법

  • 태그가 아닌 문자열만 뒤집으면 되는 문제이다.
  • 따라서 입력받은 문자열을 순회하며 < 나 ' ' (공백)이 들어올 때 까지 temp에 더해준다.
  • <의 경우 >가 들어오면 temp를 리스트에 추가해주고 종료
  • ' ' 공백을 만난 경우는 슬라이싱을 사용하여 뒤집어서 종료해준다.
import sys  
sys.stdin = open('input.txt')  
input = sys.stdin.readline  

target = input().rstrip()  
idx = 0  
result = []  
leng = len(target)  
while idx < leng:  
    temp = ''  
    if target[idx] == '<':  
        while idx < leng and target[idx] != '>':  
            temp += target[idx]  
            idx += 1  
        temp += '>'  
        idx += 1  
        result.append(temp)  
    else:  
        while idx < leng and target[idx] != ' ' and target[idx] != '<':  
            temp += target[idx]  
            idx += 1  
        result.append(temp[::-1])  
        if idx < leng and target[idx] == ' ':  
            result.append(' ')  
            idx += 1  

print(*result, sep = '')
728x90