[#17413] 단어 뒤집기2
문제
#17413 단어 뒤집기2
Silver3
적용 알고리즘: X (String)
풀이 방법
- 태그 안의 문자인지 태그 밖의 문자인지 구분하며 태그 안의 문자는 그대로 놔준다.
- 단어를 뒤집는 함수를 생성한다.
- 공백이나 열리는 태그를 만나면 단어가 끊기는 시점이다.
- 태그 내부의 문자인지 외부의 문자인지 판단하는 flag 변수를 지정해준다.
코드 흐름
- 사용자에게서 문장을 입력 받는다.
- 태그의 내부/외부 여부 판단하기
- 한 문자씩 검사한다. 만일 “<”이면 태그가 열린다는 의미이다. open(태그 열림여부 판단 변수)의 값을 1로 변환해준다. 이는 또한 단어가 이전에 있었으면 단어의 끝이라는 의미이기도 하므로 만약 현재 진행되고 있었던 단어가 존재하면 이를 최종 문장에 (뒤집어서) 넣어준다.
- ”>”라면 open의 값을 0으로 설정하고, “>”를 최종 문장에 추가한다.
- 만약 open의 값이 1이라면(현재 글자는 tag 내부에 있음). 아무 변환이 필요 없으므로 현재 문자를 그대로 최종 문장에 추가한다.
- 만약 open의 값이 0이라면(현재 글자는 tag 외부에 있음). 단어의 끊김 여부를 판단한다. 만일 공백이거나, “<”를 만나거나, 현재 문자가 전체 문장에서의 마지막 문장이라면 단어를 뒤집어서 총 문장에 추가한다. 만일 공백으로 단어가 끊긴 것이라면 공백 문자를 따로 추가해준다. 단어(word)는 추가했으니 이를 초기화해준다.
- 만일 open의 값이 0이고 4번 케이스의 나머지 케이스라면 단어는 진행 중인 것이다. 해당 문자를 단어 변수(word)에 추가한다.
- 2~5의 과정을 모든 입력된 문장의 문자에 대해서 반복한다.
- 반복이 끝나고 만약 남아있는 단어가 있다면 이를 변형하여 총 문장에 추가해주고, 출력한다.
코드
def word_backward(text):
temp = ""
for i in range(len(text)):
temp = text[i] + temp
return temp
s = input()
sent = ""
word = ""
open = 0
for i in range(len(s)):
if s[i] == "<":
sent += word_backward(word)
word = ""
open = 1
elif s[i] == ">":
open = 0
sent += s[i]
if open == 1:
sent += s[i]
else:
if s[i] == " " or s[i] == "<" or i - 1 == len(s):
sent += word_backward(word)
if s[i] == " ":
sent += " "
word = ""
elif s[i] != ">":
word += s[i]
if word != "":
sent += word_backward(word)
print(sent)
체감 난이도: 3.9/5
쉽다고 생각했었는데 생각보다 푸는데 조금 걸렸던 문제이다… 조금 더 간결하게 할 수 있을 것 같은데.. 나중에 다시 시도해 봐야겠다.