반응형
https://www.acmicpc.net/problem/5397
5397번: 키로거
문제 창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다. 키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다. 강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 입력 첫째 줄에 테
www.acmicpc.net

커서가 이동할 때, 커서 앞뒤의 값을 어떻게 처리하는지 고민하는 게 매우 어려웠던 문제.
커서의 왼쪽 / 오른쪽에 있는 값을 전부 stack으로 저장하면 되는 문제였다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
n = int(sys.stdin.readline().replace("\n","")) | |
for _ in range(n): | |
# 글자를 입력받는 stack left, 커서 이동할 때 사용할 stack right. | |
left, right = [], [] | |
string = list(sys.stdin.readline().replace("\n","")) | |
for value in string: | |
# 커서를 뒤로 옮길 경우, left에 값이 있다면 left 마지막 값을 right로 옮긴다. | |
if value == "<": | |
if len(left) != 0: | |
right.append(left.pop()) | |
# 커서를 앞으로 옮길 경우, right에 값이 있다면 right 마지막 값을 left로 옮긴다. | |
elif value == ">": | |
if len(right) != 0: | |
left.append(right.pop()) | |
# 백스페이스로 글자 지우기. | |
elif value == "-": | |
if len(left) != 0: | |
left.pop() | |
else: | |
left.append(value) | |
left_string = "".join(left) | |
# right로 이동시켰던 값은 stack에 입력순서의 역순으로 쌓여 있으므로, 재배열해준다. | |
right_string = "".join(right[::-1]) | |
print(left_string+right_string) |
반응형
'프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[Python] 프로그래머스. 땅따먹기 (Level 2) (0) | 2020.01.16 |
---|---|
[Python] 백준 2667. 단지번호붙이기 (0) | 2020.01.15 |
[Python] 프로그래머스. 입국 심사 (Level 3) (0) | 2020.01.11 |
[Python] 백준 9012. 괄호 (0) | 2020.01.10 |
[Python] 백준 1654. 랜선 자르기 (0) | 2020.01.09 |