티스토리 뷰
728x90
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
1. 문제 내용
2. 접근 방식
- 머리속에서 문제 푸는 과정을 그대로 코드로 옮기자.
문자열을 처음부터 끝까지 순회하면서 '<'와 '>'가 나올 때, ' '(공백)이 나올 때를 구분해야겠다고 생각했다.
- < : 태그의 시작
따라서 만약 이전에 단어가 존재한다면, 그것을 뒤집어서 result 변수에 미리 넣어준다. 그 후에, 다시 새롭게 word를 '<'로 시작한다.
- > : 태그의 끝
태그가 종료됐으므로, 지금까지 누적된 word를 result에 추가한 후 word는 빈 문자열로 초기화한다.
- (1) 태그 내에 있는 공백과 (2) 단어와 단어를 구분하는 공백을 구분하자.
둘을 구분하는 방법은 바로 tag 변수이다. 태그가 시작되면 True로, 종료되면 False로 값이 변경된다.
따라서 만약 tag == True라면, 태그 내에 있는 공백임으로 그대로 넘어간다. 반면 tag == False라면 단어와 단어를 구분하는 공백이므로, 누적된 word를 뒤집어 result 변수에 추가한다.
3. 정답 코드
s = input()
result = ''
tag = False
word = ''
for c in s:
if c == '<':
result += word[::-1]
tag = True
word = '<'
elif c == '>':
result += word + c
tag = False
word = ''
elif c.isspace() and not tag:
result += word[::-1] + ' '
word = ''
else:
word += c
result += word if tag else word[::-1]
print(result)
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 18870번 좌표 압축 파이썬 정답 코드 (0) | 2023.06.21 |
---|---|
[백준] 1431번 시리얼 번호 파이썬 정답 코드 (0) | 2023.06.21 |
[백준] 2477번 참외밭 파이썬 정답 코드 (0) | 2023.06.11 |
[백준] 2108번 통계학 파이썬 정답 코드 (0) | 2023.06.10 |
[백준] 1966번 프린터 큐 파이썬 정답 코드 (0) | 2023.06.10 |