알고리즘/백준(BOJ)

[백준/BOJ]#17413: 단어 뒤집기 2 [문자열/파이썬/python]

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

쉬운 문제라고 생각하고 후딱 풀려고 했는데.. 스톤헤드..!!! 은근히 오래 걸렸다....

 

<과 > delimiter(bracket) 기준으로 처음에 인덱스를 기준으로 뽑아내다가 

리스트와 char 데이터타입의 충돌로 또 애먹다가..

뒤엎고 다시 짜고.. 하다가 완성했다 결국.

 

<와 > bracket안에서만 문자열이 뒤집히지 않으므로 신경써주고

나머지는 플래그를 두어서 그외의 경우에 뒤집어준다. 

 

처음엔 reverse=True의 sort()만 자꾸 생각나서 애먹었는데 

 

parse_word=s[ptr]+parse_word

 

그냥 char타입으로 이렇게 한줄로 깔끔하게 처리할 수 있다. 키야...

 

 

파이썬 코드 

#17413_단어뒤집기2
import sys
s=list(sys.stdin.readline().rstrip())
ptr=0
parse_word=''
bracket_flag=False
res=''
while ptr<len(s):
    if s[ptr]=='<':
        parse_word+=s[ptr]
        bracket_flag=True
    elif s[ptr]=='>' and bracket_flag==True:
        parse_word+=s[ptr]
        res+=parse_word
        parse_word=''
        bracket_flag=False
    elif bracket_flag==True:
        parse_word+=s[ptr]
    elif bracket_flag==False:
        if s[ptr]==' ':
            parse_word+=s[ptr]
            res+=parse_word
            parse_word=''
        else:
            parse_word=s[ptr]+parse_word
         
    ptr+=1
    
print(res+parse_word)