[Baekjoon/Python] 5397. 키로거 (스택/문자열 커서 이동 문제)

mj·2025년 6월 13일
0

코딩테스트문제

목록 보기
54/59

문제


https://www.acmicpc.net/problem/5397

💡 문제 요약

키보드로 비밀번호를 입력하는데, 다음과 같은 특수 키가 존재한다:

  • < : 커서를 왼쪽으로 한 칸 이동 (커서가 가장 앞이면 무시)

  • > : 커서를 오른쪽으로 한 칸 이동 (커서가 가장 뒤면 무시)

  • - : 커서 왼쪽의 문자 삭제 (삭제할 문자가 없으면 무시)

  • 그 외의 문자(알파벳, 숫자): 커서 위치에 문자 삽입

문자열의 변화를 커서 이동과 함께 시뮬레이션한 후, 최종 비밀번호를 출력하는 문제다.


풀이


🧠 접근 방법

커서 기준으로 문자열을 왼쪽 스택(left)오른쪽 스택(right)으로 나눠 관리하면 커서 이동을 쉽게 구현할 수 있다.

  • 문자를 입력하면 left에 append

  • <이면 left에서 pop해서 right로 이동

  • >이면 right에서 pop해서 left로 이동

  • -이면 left에서 pop

마지막에 left + reversed(right)로 문자열 완성


💻 파이썬 코드

n = int(input())

def getPassword(text):
    left = []
    right = []

    for t in text:
        if t == "<":
            if left:
                right.append(left.pop())
        elif t == ">":
            if right:
                left.append(right.pop())
        elif t == "-":
            if left:
                left.pop()
        else:
            left.append(t)

    password = ''.join(left) + ''.join(reversed(right))
    return password


for i in range(n):
    text = input()
    password = getPassword(text)
    print(password)


✨ 마무리

  • 문자열 커서 이동 문제스택 두 개로 깔끔하게 해결할 수 있다.
  • reversed()를 이용해 오른쪽 스택을 마지막에 뒤집는 것이 핵심!

이전문제를 풀면서 커서 이동에는 스택 2개를 사용하면 된다는걸 알고있었기에 쉽게 떠올릴수있었다. 하지만, 오른쪽 스택을 뒤집는것까지는 생각하지못한것이 함정...

  • else:가 아닌 elif t.isalpha()로 제한하면 숫자나 특수문자가 입력될 경우 누락되므로 else:로 처리하는 것이 좋다.

문제에서 "키보드로 입력한 키는 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표이다."라고 했으므로 알파벳 외에 숫자도 입력가능한것을 간과하고있었다.


📚 Stack 사용법

Stack 사용법

profile
그냥 하자.

0개의 댓글