[백준/Python] BOJ 17413 - 단어 뒤집기 2

NAGANG LEE·2023년 10월 30일

알고

목록 보기
34/118

👀 문제

17413번: 단어 뒤집기 2 ✨ 실버 3

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.

먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.

  1. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
  2. 문자열의 시작과 끝은 공백이 아니다.
  3. '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.

태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다.

단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.


🔑 키포인트

스택 구현


✍️ 코드

import sys
input = sys.stdin.readline

stack = ""
answer = ""
isTag = False # 태그인지 아닌지 여부

# 문자열 입력받기
arr = list(input().rstrip())

for char in arr:
    # 태그가 아닌 경우 뒤집어서 출력
    if isTag == False:
        if char == "<":
            isTag = True
            stack += char # 태그 시작이니까 그대로 넣어주기
        elif char == " ":
            stack += char # 띄어쓰기는 그대로 넣어 주기
            answer += stack # 정답 문자열에 넣어 주기
            stack = "" # 스택은 다시 비우기
        else:
            # 거꾸로 들어가도록 새로운 char + 기존 stack
            stack = char + stack
    # 태그인 경우 똑바로 출력
    else:
        stack += char # 그대로 넣어 주기
        if char == ">": # 태그 끝나면
            isTag = False
            answer += stack # 정답에 스택 문자열 추가
            stack = "" # 스택 비우기

# 마지막 공백 뒤 일반 문자열은 stack에 남아 있으므로 answer+stack 해 주기
print(answer+stack)
profile
모바일 개발자를 목표로 하고 있어요 💭

0개의 댓글