본문 바로가기

백준 문제풀이

17413번: 단어 뒤집기 2 / silver 3 / 구현, 스택, 문자열

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

'''
17413번: 단어 뒤집기 2 / silver 3 / 구현, 스택, 문자열
'''
# S 문자열 입력받기
S = input()
# stack, reverse_flag 선언 및 초기화
stack = []
reverse_flag = True
# S 문자열 문자 하나씩 확인하기
for v in S:
    # flag=False일때
    if reverse_flag == False:
        print(v, end='')
        if v == '>':
            reverse_flag = True
    # flag=True일때
    else:
        # '<' 또는 ' ' 일때
        if v == '<' or v == ' ':
            # 스택에 담겨있던 값들 출력
            if stack:
                for i in range(len(stack) - 1, -1, -1):
                    print(stack[i], end='')
                stack.clear()
            print(v, end='')
            # '<' 일때 flag=False로 변환
            if v == '<':
                reverse_flag = False
        # stack에 문자 담기
        else:
            stack.append(v)
# 문자열 모두 확인 후, 스택에 담겨있는 값들 출력
if stack:
    for i in range(len(stack) - 1, -1, -1):
        print(stack[i], end='')

코드 리뷰

- 문제를 풀고 맞추는데 약 15분 정도 소요했습니다.

 

- 해당 문제를 풀기 위해서 stack, reverse_flag 를 활용했습니다.

- reverse_flag==True이면, 거꾸로 출력해야 한다는 의미로 '<' 또는 '  ' 문자가 아닐시, 값들을 stack에 저장시킵니다.

- reverse_flag==False이면, 정방향으로 출력 한다는 의미로 그대로 출력시킵니다.