본문 바로가기

알고리즘/백준-파이썬

[백준] 17413번 (python 파이썬)

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

 

s = input()
result = ""

i = 0
while i < len(s):
  if s[i] == "<":
    word = s[i:s.find(">", i)+1]
  elif s[i] == " ":
    word = " "
  else:
    open_tag_index = s.find("<", i)
    open_tag_index = open_tag_index if open_tag_index != -1 else len(s)
    space_index = s.find(" ", i)
    space_index = space_index if space_index != -1 else len(s)
    word_end = min(open_tag_index, space_index)
    word = s[i:word_end][::-1]
  result += word
  i += len(word)
  
print(result)

 

반복문으로 문자열을 돌며 문자 하나씩 접근해 나간다.

 

  • "<" 문자를 만났을때 : ">"문자가 반드시 존재 하므로 ">"문자의 인덱스를 찾아 "<...>"를 한 덩어리로 떼어내 result 변수에 추가한다.
  • 공백 문자를 만났을때 : result 변수에 공백문자를 추가한다.
  • 일반 문자를 만났을때 : 뒤이어 공백문자나 "<"문자가 나오면 둘 중 가까운 인덱스를 통해 단어를 떼어내서 result 변수에 추가한다. 만약 둘 다 없으면 문자열이 끝날때까지 한 덩어리로 취급해야하므로 open_tag_indes와 space_index에 문자열 길이를 넣어준다.