반응형
https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
단어 뒤집기 2 문제
정해진 조건대로 단어를 뒤집어보는 문제
조건을 하나씩 나누어 주어면서 풀어나가니 어렵지않게 해결 할 수 있었다
내가 푼 정답코드
import sys
S = sys.stdin.readline().strip() + ' ' # 마지막에 공백을 더해주자
stack = [] # 저장해줄 스택
result = '' # 결과물 출력
cnt = 0 # 괄호 안에 있는지 여부
for i in S : # 받은 문자열 찾아보자
if i == '<' : # <를 만나면
cnt = 1 # 지금 괄호 안에 있음 표시
for _ in range(len(stack)): #괄호 만나기 이전 stack 애들 비워주고 다 뒤집어서 더해!
result += stack.pop()
stack.append(i)
if i == '>' : # >를 만나면
cnt = 0 # 지금 괄호 빠져 나왔음 표시
for _ in range(len(stack)): # 괄호 안에 있는 애들은 뒤집지 말고 더해!
result += stack.pop(0)
if i == ' ' and cnt == 0: # 공백을 만나고 괄호 밖에 있다면
stack.pop() # 들어간 공백 뺴주고
for _ in range(len(stack)): # 뒤집어서 더해!
result += stack.pop()
result += ' ' # 마지막에 공백 살려주기
print(result)
반응형
📌 문제 접근 포인트
1. 문제의 요구사항을 잘 생각해보자. 문자열을 단순히 전부다 뒤집어서 출력하는 것이 아니다.
2. 그렇다면 문자를 뒤집어서 출력하는 방법 → Stack의 자료 구조 형태를 생각해서 풀어보자!
3. <와 > 사이에 있는 문자들은 뒤집으면 안된다. 그러면 지금 괄호 안에 있다는 것을 정해줄 방법이 필요하다.
4. <를 만나기 전에 있던 문자들이 들은 stack은 뒤집어서 출력후 비워줘야 이후에 출력시에 <랑 같이 뒤집어지는 불상사가 발생하지 않는다. 그러므로 <를 만나면 전부 털고, 괄호안에 있다는 표시(cnt)를 해주는 코드를 작성하자.
5. >를 만나면 괄호 빠져 나옴을 표시해주고, stack 안에 있는 애들을 뒤집지 말고 정직하게 출력해주자.
6. 공백을 만날 때마다 출력을 해주는 형식이니, 공백을 만나고 괄호 밖에 있다면 result에 하나씩 역으로 더해주고 최종적으로 출력해주자
반응형
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 16139] 인간-컴퓨터 상호작용 (python) (0) | 2023.03.23 |
---|---|
[백준 16918] 봄버맨 (python) (0) | 2023.03.22 |
[백준 1748] 수 이어 쓰기1 (python) (0) | 2023.03.19 |
[백준 1051] 숫자 정사각형 (python) (0) | 2023.03.18 |
[백준 16931] 겉넓이 구하기(python) (0) | 2023.03.17 |
댓글