새소식

Programming/1 Day 1 Commit

[BaekJoon] 17413번: 단어뒤집기 2 (Python3)

  • -
 
문제 설명

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

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

  1. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
  2. 문자열의 시작과 끝은 공백이 아니다.
  3. '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
    • 태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.

 

일단, reverse를 사용해야 하는 것은 알겠는데.. 아직까지 파이썬으로 리스트를 만든다거나 배열을 사용하는 부분에 있어서 감이 잘 안온다. 따라하는 것에만 치우쳐져 있었던 것 같다.

밑의 코드는 다른 분들이 풀어놓으신 솔루션을 참고해서 작성했다.

 

해결방안
# Solution 1

import sys

s = list(map(str, sys.stdin.readline().strip()))

res = ""
word = ""
reverse = True

for i in s:

    if i == '<':
        reverse = False
        res += word
        word = i

    elif i == '>':
        reverse = True
        res += (word + '>')
        word = ""

    elif i == ' ':
        res += word + i
        word = ""

    elif reverse:
        word = i + word

    else:
        word += i

res += word
print(res)

우선 먼저 첫번째 부분을 살펴보자

 
import sys

s = list(map(str, sys.stdin.readline().strip()))

여기서 s는 입력값들을 readline()으로 읽어서 map안에 하나씩 담기게 된다.

공백도 동일하게 담긴다.

 
for i in s:

    if i == '<':            # 괄호 < 를 만나면
        reverse = False     # reverse 하지 않음
        res += word         # res에 word를 추가
        word = i            # word는 < 가 됨

    elif i == '>':          # 괄호 > 를 만나면
        reverse = True      # reverse는 true 상태가 됨
        res += (word + '>') # res에는 word와 >이 들어감
        word = ""           # word는 다시 공백

    elif i == ' ':          # 띄어쓰기를 만나면
        res += word + i     # res는 word와 띄어쓰기를 더한 값
        word = ""           # word는 공백

    elif reverse:           # reverse일 때 
        word = i + word     # word는 reverse를 한 값

    else:                   # 그 외의 경우 (문자나 숫자)
        word += i           # word에 현재 값를 추가함

이런 식으로 적용해 볼 수 있는데, 직관적으로 이해한 바와 조금 다르다.

나도 혼자서는 생각 못하고 계속 풀어봐야 감이 올 것 같다.

모두 화이팅 하세요!

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.