아이공의 AI 공부 도전기

[Baekjoon] 17413번 : 단어 뒤집기 2 (Python, 구현, 문자열 , 스택)

 

     

 

 

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

 

코드 링크

https://github.com/stellaluminary/Baekjoon

 

GitHub - stellaluminary/Baekjoon

Contribute to stellaluminary/Baekjoon development by creating an account on GitHub.

github.com

 

Python

 

방법 1 - 메모리 32404KB / 시간 124ms / 코드 길이 637B

 

1)  '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다.

2) 연속하는 두 단어는 공백 하나로 구분한다

3)  태그와 단어 사이에는 공백이 없다.

 

이 조건을 만족하는 코드를 구현한다.

다만 태그 '<', '>'에 대한 구분과 그 안의 내용을 넣기 위해서 별도의 flag를 사용한다. 

 

import sys
input = sys.stdin.readline
l = list(input().rstrip())
res = []
flag = False
tmp = ''
for i in range(len(l)):
    if l[i] == '<':
        if tmp not in '':
            res.append(tmp[::-1])
            tmp = ''
        res.append(l[i])
        flag = True
        continue

    if l[i] == '>':
        res.append(l[i])
        flag = False
        continue

    if flag:
        res.append(l[i])
        continue

    if l[i] == ' ':
        res.append(tmp[::-1]+l[i])
        tmp = ''
        continue

    if i == len(l)-1:
        tmp += l[i]
        res.append(tmp[::-1])
        break

    tmp += l[i]

print(''.join(res))

 

방법 2 - 메모리 31620KB / 시간 304ms / 코드 길이 413B

 

방법 1을 간소화 시킨 방법이다. 

 

import sys
input = sys.stdin.readline
l = list(input().rstrip())

word = ''
res = ''
flag = False

for c in l:
    if c == '<':
        flag = True
        res += word
        word = c
    elif c == '>':
        flag = False
        res += word + '>'
        word = ''
    elif c == ' ':
        res += word + c
        word = ''
    elif flag:
        word += c
    else:
        word = c + word

print(res+word)

 

방법 3 - 메모리 31620KB / 시간 308ms / 코드 길이 474B

  

조건에 따른 string 추가 방법이다.

태그 기호 전에는 word = i + word로 역순으로 저장하도록 하며 태그 안에서는 word = word + i의 형태로 저장한다.

 

import sys
input = sys.stdin.readline
l = list(input().rstrip())
flag = False
word = ''
res = ''

for i in l:
    if flag == False:
        if i == '<':
            flag = True
            word += i
        elif i == ' ':
            word += i
            res += word
            word = ''
        else:
            word = i + word

    elif flag:
        word += i
        if i == '>':
            flag = False
            res += word
            word = ''

print(res+word)

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading