문제 이해
스택을 사용할 수 있고 문자열 자르기로 해결할 수 있습니다. 문자열 자르기로 해결해보려하다 코드가 너무 길어져서 다른 방법을 찾아봤습니다. 스택을 사용하는 방법도 있는데 파이썬으로 스택==리스트 라는 고정관념이 박혀있어서 너무 돌아가서 생각을 했습니다. 다른 분들의 풀이를 보니 문자열로 편하게 하는방법이 있었습니다😥
코드
import sys
text = list(sys.stdin.readline().rstrip())
flag = False # 정상 출력은 True
result = ''
stack = ''
#< ,' ' 만나기 전에는 전부다 스택에다가 넣어두고
#< 만나면 다른 스택에다가 넣어두고
#> 만나면 스택이랑 합치면 된다.
for i in text:
#뒤집어서 출력
if flag == False:
if i == '<':
flag = True
stack += i
elif i == ' ':
stack += i
result += stack
stack = ''
else:
stack = i + stack
#정상적으로 출력
elif flag == True:
stack += i
if i == '>':
flag = False
result += stack
stack = ''
print(result + stack)
문자열을 리스트로 만들고 for문을 돌립니다. 처음 문자열을 돌렸을 때 기본적으로 뒤집어서 출력을 해야합니다. 왜냐하면 <> 안에 있는 것들만 정상적으로 출력하면 되니깐요. stack문자열을 자세히보면 stack = 들어오는 문자 + 기존 문자 입니다. 이 방법으로 다른 뒤집는 연산 없이 들어오는 문자가 왼쪽으로 들어와서 자동으로 뒤집게 되는 것이죠
만약 뒤집는데 '<' 가 들어오면 flag=True로 만듭니다. 이제 stack 문자열에 오른쪽으로 들어오게 해야합니다. 그리고 '>' 문자가 나오면 다시 왼쪽으로 문자를 넣어야 하니 flag를 False로 만듭니다.
저는 띄어쓰기 부분에서 가장 애먹었습니다. 여기서는 띄어쓸 때, " " 공백은 stack 문자열 오른쪽에 넣어서 result 문자열 오른쪽에 합칩니다. 그리고 다시 왼쪽으로 넣어야 하니 빈 문자열로 만듭니다.
많은 시간을 고민했는 데도 버거워서 다른사람의 풀이를 보니 이해를 했습니다. 단순히 자료구조에 얽매이는게 언어의 특성을 잘 이용해야겠습니다.
728x90
'알고리즘 > 백준알고리즘' 카테고리의 다른 글
[백준 알고리즘/Python3] 17298 오큰수 (0) | 2021.12.29 |
---|---|
[백준 알고리즘/Python3] 10799 쇠막대기 (0) | 2021.12.28 |
[백준 알고리즘/Python3] 1158 요세푸스 문제 (0) | 2021.12.24 |
[백준 알고리즘/Python3] 1406 에디터 (0) | 2021.12.21 |
[백준 알고리즘/Python3] 1874 스택 수열 (0) | 2021.12.20 |