ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] BOJ 5397 : 키로거
    코딩테스트/백준 2024. 10. 16. 08:25

    https://www.acmicpc.net/problem/5397 <- 키로거 문제

    https://studyiwthme.tistory.com/169 <- 백준 에디터 1406과 똑같다. 

    요구사항

    • 시간제한 1초 L이 1,000,000 이므로 테스트 케이스가 몇 개라고 말이 없어서.. 이중 for문을 최대한 피하려다가 그냥 이중 for문을 사용하기로 생각했다.
    • 메모리제한 256MB 역시 걱정할 정도는 아니다.
    • 알파벳, 숫자, 백스페이스, 화살표가 주어졌을 때, 최종 문자열을 출력해라.

    설계

    • testCase 를 입력 받는다.. 
    • 사용자로 부터 입력을 받는다.
    • 커서 기준 왼쪽과 오른쪽을 나누기 위해서 2개의 리스트를 초기화한다. 
    • 입력 받는 문자열에 대해 for문을 돌린다. 
    • 각 케이스 별로 if문을 사용해서 나눈다. 
      • "<" 일 때
        • 커서 기준 왼쪽이 뭘 있어야 커서를 움직을 수 있잖아요. 그래서 if leftStack: 
        • 커서가 왼쪽으로 움직이면, 예를 들어 abc| ( | 는 커서입니다.) ab|c  이렇게 됩니다. 그러면 커서 기준으로 오른쪽에 c가 들어갔죠. 따라서 오른쪽스택.append(왼쪽스택.pop()) 을 해줍니다. 
      • ">" 일 떄는 반대이고 나머지도 한번 생각해보세요. 
    • 출력할 떄 join 메서드를 사용하고 왼쪽 스택 + 오른쪽 스택은 역순으로 

    실수

     만약 커서의 위치가 줄의 마지막이 아니라면, 커서 및 커서 오른쪽에 있는 모든 문자는 오른쪽으로 한 칸 이동한다.

    문제에서 위 문장을 출력할 때 커서가 마지막이 아니라면 커서 기준 왼쪽과 오른쪽을 붙일 때, 한칸 띄우라는 말로 해석을 했다.

    예를 들어 ab|c 일때 ab c 이렇게 출력인줄.. 

    구현

    import sys
    input = lambda: sys.stdin.readline().rstrip()
    
    N = int(input())
    
    for _ in range(N):
        password = input()
        leftStack = []
        rightStack = []
        
        for str in password:
            if str == "<":
                if leftStack:
                    rightStack.append(leftStack.pop())
            elif str == ">":
                if rightStack:
                    leftStack.append(rightStack.pop())
            elif str == "-":
                if leftStack:
                    leftStack.pop()
            else:
                leftStack.append(str)
        
        print("".join(leftStack + rightStack[::-1]))
    • 위 소스 코드를 and 메서드를 이용해 한 줄로 할 수 있지만, 개인적으로 저게 더 가독성이 좋아보인다.

    '코딩테스트 > 백준' 카테고리의 다른 글

    [Python] BOJ 17298 : 오큰수  (0) 2024.10.19
    [Python] BOJ 1158 : 요세푸스 문제  (0) 2024.10.17
    [Python] BOJ 6198 : 옥상 정원 꾸미기  (0) 2024.10.15
    [Python] BOJ 1406 : 에디터  (0) 2024.10.14
    [Python] BOJ 11328 : Strfry  (0) 2024.10.11
Designed by Tistory.