본문 바로가기

알고리즘 삽질장

[BOJ] 17413번 - 단어 뒤집기 2

반응형


문제설명

https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

사고과정

  • 먼저 태그가 있는 인덱스만 따로 빼내서 태그가 있는 문자열 추출까지는 했는데, 이렇게 따로 빼낸 태그가 있는 인덱스를 가지고 일반 문자열이 있는 인덱싱으로 가는 데 막혀서 해결하지 못했다..
  • 구글링을 해보니 주어진 문자열을 입력받아서 while 문을 하나씩 돌면서 < > 태그 안의 내용은 그냥 그대로 두고 문자열만 마주쳤을 때 뒤집는 선형방식으로 구현했다. 
  • 그리고 문자열이 알파벳인지 확인하는 isalpha()를 배웠었는데 숫자 또는 문자열인가를 확인하는 isalnum() 함수도 새롭게 알게 되었다.

풀이(스스로 못 푼 풀이)

import sys
input = sys.stdin.readline
word = list(input().rstrip())

index = 0
start = 0  # tag아닌 문자열 시작하는 위치

while index < len(word):
    # < > 태그에 해당하는 부분
    if word[index] == '<':
        index += 1
        while word[index] != '>':
            index += 1
        index += 1
    # < > 태그 영역 밖에 있는 뒤집을 문자열
    elif word[index].isalnum():
        start = index
        while index < len(word) and word[index].isalnum():
            index += 1
        temp = word[start:index] # 뒤집을 부분 문자열
        word[start:index] = temp[::-1]
    # 공백인 경우 무시
    else:
        index += 1
print(''.join(word))
반응형

'알고리즘 삽질장' 카테고리의 다른 글

[BOJ] 17298번 - 오큰수  (0) 2021.10.25
[BOJ] 10799번 - 쇠막대기  (0) 2021.10.25
[BOJ] 1158번 - 요세푸스 문제  (0) 2021.10.24
[BOJ] 10845번 - 큐  (0) 2021.10.24
[BOJ] 1406번 - 에디터  (0) 2021.10.24