백준 문제풀이 17413 단어 뒤집기2

Kim. K.S·2022년 1월 18일
0

boj 17413 : 단어 뒤집기 2

문제 주소: https://www.acmicpc.net/problem/17413

난이도: silver 3

1.문제설명

  • 문자열이 주어지는데 뒤집어서 출력해봐라 규칙은 예시를 통해 보는게 쉽다.
    baekjoon online judge -> noojkeab enilno egduj  
    <open>tag<close> -> <open>gat<close>
    <ab cd>ef gh<ij kl> -> <ab cd>fe hg<ij kl>
  • 띄어쓰기를 기준으로 뒤집고 <>안에 포함되면 순서대로 출력한다.

2.문제해결 아이디어.

  • 문자열원소를 하나씩 pop해보고
  • <로 시작하면 >가 나올때까지 계속 pop하면되고
  • 문자라면 stack에 추가해주고 공백을 만나면 출력하자.

3.문제접근법

  • 위의 방법으로 구현하면 됐는데, 하다보니깐 약간의 예외처리?가 필요했다.
    • 전체과정은 아래와 같다.
    • deque에 문자열 전체를 넣어주기
    • deque에 원소가 남아있다면
      • pop
        • pop한 원소가 <이고 동시에 stack에 원소들이 있다면 stack원소들 출력
        • pop한 원소가 <이고 stack이 비어있다면 >나올때까지 pop
        • pop한 원소가 문자(공백x)라면 stack에 추가
        • pop한 원소가 공백이면 stack원소들 출력하고 마지막으로 pop했던 공백 출력
    • deque에 원소가 없어서 끝남
    • 그래도 stack엔 남아있을수 있음 그래서 stack 출력해줘야함

4.특별히 참고할 사항

  • queue와 stack을 적절히 활용하면된다.
  • deque에 문자열을 통으로 넣으면 원소단위로 분해된다!

5.코드구현

from collections import deque

string = input()

def print_stack(stack): #stack에 넣은 문자열을 출력하는 함수, 반복되서 함수로 만들어줌
    while stack:
        for i in range(len(stack) - 1, -1, -1):
            print(stack[i], end="")
            stack.pop()

def reverse_string(string):
    stack = []
    q = deque(string) #문자열 그대로 deque에 넣으면 원소단위로 분해되서 들어간다.
    while q:
        temp = q.popleft() #맨 앞에 원소를 pop한다.
        if stack and temp == "<": #만약에 pop한게 <임과 동시에, stack에 쌓여있으면 먼저 출력해줘야함
            print_stack(stack)
        if temp == "<": #pop된게 < 라면(stack은 비워진상태)
            print(temp, end = "") #일단 < 출력해줌
            while q: #q에 원소가 있는동안
                _temp = q.popleft() #맨 앞에 원소 pop
                if _temp == ">": #그게 > 라면
                    print(_temp, end ="") # >출력해주고 멈춤
                    break
                else: #아니라면 원소 일단 출력해줌
                    print(_temp, end="")

        elif temp != " ": #만약에 공백이 아니면 stack에 넣어준다
            stack.append(temp)
        else: #공백이라면
            print_stack(stack) #stack원소 출력후
            print(temp, end = "")#공백 추가해줌
    print_stack(stack) #q는 비어있지만 stack에 남아있는 원소들 출력해줘야함

reverse_string(string)
profile
시원한 맥주, 음악, 야구, 사진찍기를 좋아합니다.

0개의 댓글

관련 채용 정보