문제
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
- 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
- 문자열의 시작과 끝은 공백이 아니다.
- '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
입력
첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.
출력
첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.
예제 입력 1
baekjoon online judge
예제 출력 1
noojkeab enilno egduj
예제 입력 2
<open>tag<close>
예제 출력 2
<open>gat<close>
예제 입력 3
<ab cd>ef gh<ij kl>
예제 출력 3
<ab cd>fe hg<ij kl>
예제 입력 4
one1 two2 three3 4fourr 5five 6six
예제 출력 4
1eno 2owt 3eerht rruof4 evif5 xis6
예제 입력 5
<int><max>2147483647<long long><max>9223372036854775807
예제 출력 5
<int><max>7463847412<long long><max>7085774586302733229
정답
import sys
input = sys.stdin.readline().strip()
# 단순 리스트와 문자열을 이용해서 문제를 푸려고 노력했으나 코드가 너무 길어질게 뻔해 stack을 응용해봤다.
# 입력값을 개행문자 '\n'을 제외해서 입력받는다.
word = input
# stack과 stack 내부에서 문자열을 뒤집어 result에 넣을것이다.
Stack = ""
result = ""
# flag는 마치 스위치와 같다. 특정 조건을 달성하면 True로 변환하여 True 상태의 조건문을 실행할것이다.
flag = False
# 입력받은 word의 글자를 하나하나 i에 대입 해 루프를 돌린다.
for i in word:
# 만약 flag가 False라면 아래 조건문을 실행한다.
if flag == False:
# 만약 "<" 기호가 i라면
if "<" == i:
# 문자열을 뒤집지 않은상태로 stack에 넣기 위해 스위치를 킨다
flag = True
# stack에 < 를 입력
Stack = Stack + i
# 만약 i 가 공백이라면
elif i == " ":
# 공백을 기준으로 문자열을 끊어주니 stack에 공백을 추가해준 뒤 result에 더해주고 stack 내부를 비워준다.
Stack = Stack + i
result += Stack
Stack = ""
else:
# 위 2가지 조건에 해당되지 않는 경우 그냥 stack에 역순으로 i를 추가한다.
Stack = i + Stack
# 위 조건문의 수행으로 flag가 True로 바뀐 상태라면
elif flag == True:
# stack에 순서대로 i 값을 대입하여 문자열을 뒤집지 않는다.
Stack = Stack + i
# 만약 i가 >라면
if i == ">":
# result에 그동안 stack에 쌓인 문자열을 더해준다.
result += Stack
# 괄호가 닫혔으므로 문자열 스위치를 다시 내린다.
flag = False
# stack에 있는 모든 내용은 result에 추가 되었으므로 stack을 비워준다.
Stack = ""
# 다시 루프 시작
# 혹시라도 < > 태그 뒤에 문자열이 올 수도 있으니 마지막에 stack 안의 내용을 추가해준다.
print(result + Stack)
'코딩딩 > BOJ' 카테고리의 다른 글
[백준 2504] 문제풀이 (0) | 2023.05.22 |
---|---|
[백준 1158] 문제풀이 (0) | 2023.05.19 |
[백준 2445] 문제풀이 (0) | 2023.05.19 |
[백준 1541] 문제풀이 (0) | 2023.05.19 |
[백준 24511번] 문제풀이 (0) | 2023.05.17 |