728x90
시간 제한 1초, 메모리 제한 512MB
# 조건
- 문자열 S가 주어졌을 떄, 이 문자열에서 단어만 뒤집으려고 한다.
- 먼저, 문자열 S는 아래와 같은 규칙을 지킨다.
- 알파벳 소문자('
a
'-'z
'), 숫자('0
'-'9
'), 공백(' '), 특수 문자('<
', '>
')로만 이루어져 있다. - 문자열의 시작과 끝은 공백이 아니다.
- '
<
'와 '>
'가 문자열에 있는 경우 번갈아가면서 등장하며, '<
'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
- 알파벳 소문자('
- 태그는 '
<
'로 시작해서 '>
'로 끝나는 길이가 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
'ALGORITHM > 자료구조' 카테고리의 다른 글
[백준 19583번] 파이썬 - 싸이버 개강총회 (0) | 2023.08.26 |
---|---|
[백준 1717번 ] 파이썬 - 집합의 표현 (0) | 2023.08.26 |
[백준 19585번] 파이썬 - 전설 (0) | 2023.08.16 |
[백준 28099번] 파이썬 - 이상한 배열 (0) | 2023.08.15 |
[백준 20955번] 파이썬 - 민서의 응급 수술 (0) | 2023.08.12 |