반응형
◎ 문제풀이
문자열을 조작하는 문제이다. 파이썬은 다양한 문자열 조작 함수를 제공하기에 간편하게 풀 수 있다. 문제의 목적은 태그(특수문자), 공백(특수문자)로 구분되는 문자열을 뒤집기이다. 문자열을 뒤집는 함수인 reverse()와 특수문자를 구분하는 isalnum()을 이용하면 문제에 쉽게 접근할 수 있다.
1) Pointer 하나를 만들고 문자열을 탐색한다.
2) 태그를 만나면 태그가 끝날때 까지 Pointer를 1씩 증가한다
3) 공백을 만나면 Pointer를 1 증가한다.
4) 문자열을 만나면 문자열 구간을 탐색하고 뒤집는다.
◎ 코드
import sys
input = sys.stdin.readline
st = list(input().rstrip())
i = 0
while i < len(st):
if st[i] == "<" : #태그를 만나는 경우
while st[i] != ">" :
i += 1
i += 1
elif st[i].isalnum() : #문자열을 만나는 경우
#구간탐색
start = i
while i<len(st) and st[i] != " " and st[i] != "<" :
i += 1
#문자열 뒤집기
tmp = st[start:i]
tmp.reverse()
st[start:i] = tmp
else : i += 1 # 공백을 만나는 경우
#출력
print("".join(st)[:])
번외로
나는 문자열이 아닌 자료구조 관점으로 접근했다.
1) 입력받은 문자를 큐에 넣는다.
2) 태그를 만나면 태그가 끝날때까지 큐를 POP한다.
3) 공백을 만나면 큐를 POP 한다.
4) 문자를 만나면 문자를 큐에서 POP하여 STACK에 PUSH하고 문자열이 끝나면 다시 STACK을 POP하여 문자열을 뒤집는다.
◎ 코드
from collections import deque
import sys
input = sys.stdin.readline
result = []
stack = []
q = deque(list(input().rstrip())) #큐에 문자 넣기
while q :
char = q.popleft();
if char == "<" :
result.append(char)
while char != ">" :
char = q.popleft()
result.append(char)
elif char == " " : result.append(char)
else :
stack.append(char)
while q[0] != " " and q[0] != "<" :
char = q.popleft()
stack.append(char)
if not q : break
while stack :
result.append(stack.pop())
print("".join(result)[:])
반응형
'문제풀이 > String' 카테고리의 다른 글
[PS] BOJ2608 로마숫자 ( string ) with JAVA (0) | 2023.08.28 |
---|---|
[PS] BOJ165000 문자열 판별 ( String ) with JAVA (0) | 2023.08.23 |
[JAVA] 백준 1436번 영화감독 숌 : 문자열 찾기 (0) | 2021.07.31 |
[JAVA] 백준 5622번 크로아티아 알파벳 : 문자열 탐색 (0) | 2021.07.13 |
[JAVA] 백준 2908번 상수 : 문자열 역순 출력 (0) | 2021.07.12 |