티스토리 뷰
SMALL
오늘의 문제
https://www.acmicpc.net/problem/1406
내 풀이
# 빠른 입력 (이거 쓰니까 시간초과 해결됨)
import sys
def input(): return sys.stdin.readline().rstrip()
S = input()
M = int(input())
# 커서의 왼쪽 문자열을 뜻하는 left_stack
left_stack = list(S) # 각 문자를 리스트의 요소로 저장
# 커서의 오른쪽 문자열을 뜻하는 right_stack
right_stack = []
# M만큼 반복
for _ in range(0, M):
command = input().split() # P x 와 같은 형태를 처리하기 위해
if command[0] == "L" and left_stack: # L 명령이고 left_stack이 비어있지 않다면
last = left_stack.pop() # left_stack의 마지막 값을 pop
right_stack.append(last) # 그 값을 right_stack의 맨 뒤로 push
elif command[0] == "D" and right_stack: # D 명령이고 right_stack 비어있지 않다면
last = right_stack.pop() # right_stack 마지막 값을 pop
left_stack.append(last) # 그 값을 left_stack의 맨 뒤로 push
elif command[0] == "B" and left_stack: # B 명령이고 left_stack이 비어있지 않다면
left_stack.pop() # left_stack의 마지막 값을 pop
elif command[0] == "P": # P 명령이면
left_stack.append(command[1]) # 새 값을 left_stack의 맨 뒤로 push
right_stack.reverse() # right_stack에는 값들이 거꾸로 들어갔기 때문에 reverse 해줘야 올바른 방향이 됨
answer = left_stack + right_stack # 커서의 왼쪽 값과 오른쪽 값을 합친 리스트 answer
print("".join(answer)) # 리스트 answer를 공백없이 문자열로 합친 후 출력
핵심은 스택 2개를 사용하여 푸는 문제.
커서의 왼쪽에 있는 값들과 오른쪽의 있는 값들을 각각 스택을 통해 관리한다.
커서의 왼쪽에 있다가 오른쪽으로 가게 되는 문자들은 left_stack에서 right_stack의 방향으로 이동하는데, 이때 스택의 특성상 left_stack의 맨 뒤 값이 right_stack의 맨 뒤로 쌓이게 된다. 문자가 커서의 오른쪽에 있다가 왼쪽으로 이동할 때에도 맨 뒤에 있는 값들끼리 바꾸면 돼서 이 편리함 때문에 '스택'을 사용하는 것이다.
그래서 이렇게 되면 left_stack과 달리 right_stack에는 커서 오른쪽의 문자들이 거꾸로 배치되는데, 이는 명령을 다 수행한 후(for문 종료 이후) 리스트를 reverse 하면 된다.
-> 여기까지 구현했는데 계속 시간초과가 떠서 질문 게시판을 보니, sys 라이브러리를 써서 입력 시간을 줄이라고 했다.
import sys
def input(): return sys.stdin.readline().rstrip()
그랬더니 통과핑~
LIST
'Algorithm' 카테고리의 다른 글
프로그래머스 Lv.2: 올바른 괄호 - Python 풀이 (0) | 2025.01.16 |
---|---|
프로그래머스 Lv.2: 주식가격 - Python 풀이 (1) | 2025.01.15 |
프로그래머스 스택/큐: 기능개발 - Python 풀이 (0) | 2025.01.13 |
백준 11047번: 동전 0 - Python 풀이 (1) | 2024.12.08 |
백준 1463번: 1로 만들기 - Swift 풀이 (0) | 2024.12.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- ios앱개발
- MySQL
- Swift로백준풀기
- 힙
- ios
- 알고리즘
- 그리디
- 우선순위큐
- 코테준비
- 이분탐색
- Programmers
- 스택
- Swift
- dp
- 해시
- 다익스트라
- 백준
- Deque
- SQL
- 구현
- 자료구조
- Baekjoon
- 다이나믹프로그래밍
- 프로그래머스
- 투포인터
- 코딩테스트
- Dijkstra
- 큐
- Python
- 코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함