https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
'''
17413번: 단어 뒤집기 2 / silver 3 / 구현, 스택, 문자열
'''
# S 문자열 입력받기
S = input()
# stack, reverse_flag 선언 및 초기화
stack = []
reverse_flag = True
# S 문자열 문자 하나씩 확인하기
for v in S:
# flag=False일때
if reverse_flag == False:
print(v, end='')
if v == '>':
reverse_flag = True
# flag=True일때
else:
# '<' 또는 ' ' 일때
if v == '<' or v == ' ':
# 스택에 담겨있던 값들 출력
if stack:
for i in range(len(stack) - 1, -1, -1):
print(stack[i], end='')
stack.clear()
print(v, end='')
# '<' 일때 flag=False로 변환
if v == '<':
reverse_flag = False
# stack에 문자 담기
else:
stack.append(v)
# 문자열 모두 확인 후, 스택에 담겨있는 값들 출력
if stack:
for i in range(len(stack) - 1, -1, -1):
print(stack[i], end='')
코드 리뷰
- 문제를 풀고 맞추는데 약 15분 정도 소요했습니다.
- 해당 문제를 풀기 위해서 stack, reverse_flag 를 활용했습니다.
- reverse_flag==True이면, 거꾸로 출력해야 한다는 의미로 '<' 또는 ' ' 문자가 아닐시, 값들을 stack에 저장시킵니다.
- reverse_flag==False이면, 정방향으로 출력 한다는 의미로 그대로 출력시킵니다.
'백준 문제풀이' 카테고리의 다른 글
5014번: 스타트링크 / silver 1 / BFS (0) | 2023.04.26 |
---|---|
10819번: 차이를 최대로 / silver 2 / 브루트포스, 순열 (0) | 2023.04.25 |
10867번: 중복 빼고 정렬하기 / silver 5 / 정렬 (0) | 2023.04.23 |
2293번: 동전 1 / gold 5 / DP (0) | 2023.04.22 |
1057번: 토너먼트 / silver 4 / 브루트포스 (0) | 2023.04.21 |