상세 컨텐츠

본문 제목

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

STUDY/__Coding Test

by 2_54 2022. 1. 26. 01:10

본문

문제 링크 : https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net


문제

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

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

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

태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.

 

입력

첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.

출력

첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.

 

예제 입력 : 

baekjoon online judge

예제 출력 :

noojkeab enilno egduj

예제 입력2 :

<open>tag<close>

예제 출력2 : 

<open>gat<close>

 

코드

import sys
from collections import deque
input = sys.stdin.readline

str = list(input().strip())
result = []
queue = deque()
flag = 0

for i in range(len(str)):
    if str[i] == ' ':
        while queue:
            result.append(queue.pop())
        result.append(str[i])
        
    elif str[i] == '<':
        while queue:
            result.append(queue.pop())
        flag = 1
        result.append(str[i])
        
    elif flag == 1 and str[i] == '>':
        flag = 0
        result.append(str[i])
        
    elif flag == 1:
        result.append(str[i])
        
    elif flag == 0:
        queue.append(str[i])

while queue:
    result.append(queue.pop())
print(''.join(result))

 

+ 기억해두기

 

1. 문자열 문자를 배열에 하나씩 넣기
list(문자열) 하면 된다!
그래서 list(input().strip()) 으로 문자가 들어간 배열 생성

 

2. 반대로 문자로 이루어진 배열을 문자열로 합치기
''.join(배열)

print(''.join(list)) # List의 Element들을 공백없이 붙임
print(' '.join(list)) # List의 Element들을 공백을 이용해서 구분
print('-'.join(list)) # List의 Element들을 '-' 문자를 이용해서 구분
print('\n'.join(list)) # 한줄에 하나씩 출력

 

+ TMI

 

'< ' 만난 후에 while 로 '>' 만날 때까지

조건을 사용하여 조금 더 간단하게

코딩을 할 수 있을 것 같다. 


사실 저 코드가 시간 초과가 뜰 줄 알았는데 

그렇진 않았다. 오~


그래서 while로 바꿔서 i += 1씩 하려다가..
나중에 시간 나면 하기로 했다. 

(안하겠다는 뜻)

우선은 저것도 맞는 방법이니까~ 

처음으로 백준 첫 제출에 맞았습니다가 뜬 것 같다
기분좋~다~

다른 문제들도 화이팅해야지..

 

반응형

관련글 더보기

댓글 영역