문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.
첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.
s=input()
stk=[]
r=''
i=0
while i<len(s):
if s[i] == '<':
while len(stk) != 0:
r += stk.pop()
while s[i] != '>':
r += s[i]
i += 1
r += '>'
i += 1
elif s[i] == ' ':
while len(stk) != 0:
r += stk.pop()
r += ' '
i += 1
else:
stk.append(s[i])
i += 1
while len(stk) != 0:
r += stk.pop()
print(r)
[::-1]을 활용하면 더 간결하게 처리할 수 있음.while s[i] != '>' 방식으로 직접 i를 증가시켜 가독성이 떨어짐.split()과 join()을 활용하면 더 효율적임.join()하도록 개선.inside_tag 변수를 사용.[::-1]을 활용하여 더 효율적인 코드로 개선.s = input()
result = []
temp = ''
inside_tag = False
for char in s:
if char == '<':
if temp:
result.append(temp[::-1])
temp = ''
inside_tag = True
result.append(char)
elif char == '>':
inside_tag = False
result.append(char)
elif inside_tag:
result.append(char)
elif char == ' ':
result.append(temp[::-1])
result.append(char)
temp = ''
else:
temp += char
if temp:
result.append(temp[::-1])
print(''.join(result))
join()으로 문자열을 조합함으로써 성능 개선.inside_tag 변수로 명확하게 구분하여 처리.[::-1]을 활용하여 단어를 뒤집어 가독성과 성능을 개선!