[백준] 5397번 리뷰
서론
최근 ‘‘이것이 코딩 테스트다’’ 라는 책과 ‘‘바킹독의 강의 및 문제집’‘으로 코딩 테스트를 준비하고 있다. 하루에 한 문제씩 꾸준하게 몆 달동안 푼다면 테스트에 상당한 도움이 될거라고 생각해서 바로 착수했다. 이 글에서는 내가 해결했던 연결 리스트 문제 중 하나인 5397번에 대해서 리뷰해보겠다!
본론
1
2
3
4
5
6
7
8
비밀번호를 훔치기 위해서 컴퓨터에 키로거를 설치했다 ..
> 사용자가 키보드로 입력한 문자열을 알아내기 위해서 스택/큐 ..
창에서 입력한 키가 주어졌을 때, 비밀번호를 알아내는 프로그램을 작성하시오.
> 입력한 모든 문자가 주어졌을 때, 이를 통해 문자열을 알아내는 프로그램을 작성하시오.
커서 및 커서 오른쪽에 있는 모든 문자는
> 문자열이 이를 가리키는 포인터를 중심으로 왼쪽/오른쪽 문자열로 나뉘고 있다.
사용자가 키보드로 입력했던 모든 문자는 스택/큐에 방문 기록처럼 쌓여 있는 상황이라고 보면 된다. 입력된 문자는 방향, 백스페이스, 문자로 나뉘고 방향과 백스페이스를 고려해서 문자열을 구성하면 되는 간단한 문제다. 또한 커서로 문자열이 나뉘는 것과 제시된 제약 조건을 통해 데크가 필요하다는 것을 알 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from collections import *
from typing import *
cases = int(input())
for _ in range(cases):
raw_message = input()
left: Deque = deque()
right: Deque = deque()
for ch in raw_message:
if ch == '<': if left: right.appendleft(left.pop())
elif ch == '>': if right: left.append(right.popleft())
elif ch == '-': if left: left.pop()
else: left.append(ch)
print(''.join(left + right))
결론
- 기존의 방식과는 다르게, 코드/수학의 관점으로 바꿔서 독해하고 있다.
- 문제를 풀 땐, 이를 이해하고 풀이 계획을 작성하는 것에 많은 시간을 쏟자.
- 나는 이렇게 사소한 습관을 이제서야 고치고 코딩 테스트를 준비하고 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.