풀이
- 처음 접근한 방식은 그래도 최대한 계산을 덜하도록 하기 위해
- 인덱스와 길이를 계산하면서 조건 분기후 처리하려 했지만
- 역시나 시간초과가 발생하여
- 아래에 있던 힌트에 스택을 활용하여 해결
- 좌우에 각각의 배열을 만들어 해결했는데
- 우선 초기 문자열을 좌측 l 배열에 넣고
- L문자가 주어지면 l배열의 가장 마지막 값을 r배열 가장 왼쪽에 추가하고
- D는 l배열 가장 마지막 문자를 지우는 형식으로 B와 P 또한 각 조건 분기에 맞게 처리하여
- 마지막엔 각각의 배열을 합쳐 출력하여 해결
- 여기서 deque는 간단하게 배열 좌우에서 추가 제거가 가능하도록 하기 위해 사용
- 첫 번째 풀이가 정답 코드이며, 두 번째 풀이가 시간 초과 코드
첫 번째 풀이(정답)
import sys
from collections import deque
input = sys.stdin.readline
l,r = deque(list(input().rstrip('\n'))),deque([])
for _ in range(int(input())):
li = input().rstrip('\n').split()
if li[0] == 'L' and len(l): r.appendleft(l.pop())
elif li[0] == 'D' and len(r): l.append(r.popleft())
elif li[0] == 'B' and len(l): l.pop()
elif li[0] == 'P': l.append(li[1])
print(''.join(l+r))
두 번째 풀이(시간 초과)
import sys
from collections import deque
input = sys.stdin.readline
s = list(input().rstrip('\n'))+['']
idx = len(s)-1
ln = idx
for _ in range(int(input())):
li = input().rstrip('\n').split()
if li[0] == 'L' and idx > 0: idx -= 1
elif li[0] == 'D' and idx < ln: idx += 1
elif li[0] == 'B' and idx > 0:
s.pop(idx-1)
idx -= 1
ln -= 1
elif li[0] == 'P':
s.insert(idx,li[1])
idx += 1
ln += 1
print(''.join(s))
'알고리즘' 카테고리의 다른 글
[백준, 파이썬, 5014번] 스타트링크 (0) | 2024.05.02 |
---|---|
[백준, 파이썬, 2644번] 촌수계산 (0) | 2024.05.01 |
[백준, 파이썬, 10867번] 중복 빼고 정렬하기 (0) | 2024.04.23 |
[파이썬] numpy (0) | 2024.04.05 |
벡터 vector (0) | 2024.04.04 |