개발 연습장/백준 문제풀이

[파이썬, Python] 백준 17413: 단어 뒤집기 2

LooanCheong 2023. 7. 24. 11:17
반응형

문제

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

코드

s = input()
stack = []
ans = []
reverse = True

for i in s:
    if i == ' ':
        while stack:
            ans.append(stack.pop())
        ans.append(i)
        
    elif i == '<':
        reverse = False
        while stack:
            ans.append(stack.pop())
        ans.append(i)
        
    elif i == '>':
        reverse = True
        ans.append(i)
        
    else:
        if not reverse:
            ans.append(i)
        else:
            stack.append(i)
            
while stack:
    ans.append(stack.pop())

print(''.join(ans))

설명

우선 입력값을 s로 받아주고,
뒤집힐 글자를 넣어둘 stack과 정답을 넣어둘 ans를 리스트로 만들어주었다.
그리고 뒤집힐 상태를 정해줄 reverse도 만들어 주었다.
'<'가 오는 경우가 아니면 뒤집어야 하기에 기본 상태를 True로 설정했다.

문자열을 돌며 행동을 취한다.

1. 문자가 공백(' ') 일 경우
기존까지 쌓아놨던 문자열이 있다면 문자열을 역순으로 정답에 넣어준다.
이후 공백을 정답에 추가한다.

2. 문자가 '<'일 경우
reverse 상태를 False로 바꿔준다.
기존까지 쌓아놨던 문자열이 있다면 문자열을 역순으로 정답에 넣어준다.
이후 '<'를 정답에 추가한다.

3. 문자가 '>'일 경우
reverse 상태를 True로 바꿔준다.
'>'를 정답에 추가한다.

4. 그 외의 경우(그냥 문자인 경우)
reverse의 상태에 맞춰
True라면 스택에,
False라면 정답에 넣어준다.

문자열을 다 돌고 남은 스택을 확인한다.
스택이 남아있다면 역순으로 정답에 넣어준다.

최종적으로 정답을 출력한다.

반응형