BOJ_1406 에디터
- TOC {:toc}
이 글은 백준 온라인 저지의 1406번 문제를 파이썬(Python)으로 풀이한 것을 모아놓은 글입니다.
일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.
2021.04.27
메모리 | 시간 | 코드 길이 |
---|---|---|
46992 KB | 472 ms | 465 B |
단계 | 시작 시각 | 끝난 시각 | 걸린 시간 |
---|---|---|---|
문제 이해 | 11:27:29 | 11:29:07 | |
풀이 생각 | 11:31:47 | 11:37:35 | |
코딩 | 11:37:51 | 11:52:12 | |
디버깅1 | 11:52:28 | 11:57:48 | |
디버깅2 | 11:57:54 | 12:09:15 |
# with queue / stack
import sys
from collections import deque
input = sys.stdin.readline
bcur = list(input().rstrip())
acur = deque([])
for _ in range(int(input())):
c, *v = input().split()
if c == "L":
if bcur:
acur.appendleft(bcur.pop())
elif c == "D":
if acur:
bcur.append(acur.popleft())
elif c == "B":
if bcur:
bcur.pop()
else:
bcur.append(v[0])
print("".join(map(str, bcur + list(acur))))
# without queue / stack: 시간 초과
import sys
input = sys.stdin.readline
s = [0] + list(input().rstrip())
i = len(s) - 1
for _ in range(int(input())):
c, *v = input().split()
if c == "L":
if i:
i -= 1
elif c == "D":
if i != len(s) - 1:
i += 1
elif c == "B":
if i:
del s[i]
i -= 1
else:
s.insert(i + 1, v[0])
i += 1
# 0은 빼고 출력해야한다.
print("".join(map(str, s[1:])))
아이디어 & 풀이
without queue / stack
- 인덱스에 해당하는 글자 다음에 커서가 위치한 것으로 간주한다.
- 가장 첫 글자 앞으로도 커서가 갈 수 있으므로 인덱스 0에 0을 채워 빈공간을 만들어준다.
insert(i, 글자)
: 입력한 인덱스i
의 글자 ‘앞’에 새로운 글자가 삽입되므로i + 1
을 넘겨주어야 한다.del list[i]
: 입력한 인덱스i
의 위치의 글자가 삭제되므로i
를 넘겨주면 된다.
디버그
- 큐 / 스택을 이용하지 않고 리스트의 인덱스와
del
,insert()
를 사용해서 구현하면 시간초과된다.
피드백
acur
도 굳이deque
를 이용하지 않고 그냥 스택으로 관리한 다음 출력할 때만 역전시켜주면 된다.- Truthy, Falsy 이용할 때 헷갈리지 말기.
i
가0
이 아닐 때 실행if i
i
가0
일 때 실행if not i
input
대신readline()
을 사용할 때rstrip()
까지 안전하게 해주려면lambda
를 쓸 수 밖에 없는 것 같다.rstrip()
까지하면input = sys.stdin.readline().rstrip
으로readline()
이 실행돼서 단순히input
으로 문자대 문자 치환이 안 되는 것 같다.input = lambda: sys.stdin.readline().rstrip()
참고 답안
import sys
input = sys.stdin.readline
bcur = list(input().rstrip())
acur = []
for _ in range(int(input())):
c, *v = input().split()
if c == "L":
if bcur:
acur.append(bcur.pop())
elif c == "D":
if acur:
bcur.append(acur.pop())
elif c == "B":
if bcur:
bcur.pop()
else:
bcur.append(v[0])
print("".join(map(str, bcur + acur[::-1])))
-
ps-python