[백준 Python Swift] 5397번 키로거

Cobugi·2021년 8월 28일
1

백준

목록 보기
9/21
post-thumbnail

5397번 키로거


풀이 방법

  • 입력된 문자열을 한글자씩 for문을 돌면서
  • 커서를 기준으로 좌, 우 스택에 넣는다(커서를 움직이는게 아니라 데이터를 옮기는 것)
    • "<"(">")일 때, 왼쪽(오른쪽)의 스택에 데이터가 있으면 pop해서 오른쪽(왼쪽)에 append
    • "-"일 때, 왼쪽 스택에서 pop
    • 그냥 문자면 왼쪽에 append한다
  • 마지막에 합칠 때, 오른쪽의 배열을 반대로 뒤집어야함
  • ex) "<<BP<A>>Cd-"
  • dataleft_stackcursorright_stack
    "<"left에 데이터가 없으므로 pass|-
    "<"left에 데이터가 없으므로 pass|-
    "B"B|-
    "P"BP|-
    "<"B|P
    "A"BA|P
    ">"BAP|-
    ">"BAP|right에 데이터가 없으므로 pass
    "C"BAPC|-
    "d"BAPCd|-
    "-"BAPC|-

풀이


Python

test_case = int(input())

for _ in range(test_case):
    user_input = input()
    left_stack, right_stack = list(), list()
    for i in user_input:
        if i == "<":
            if left_stack:
                left_popped = left_stack.pop()
                right_stack.append(left_popped)
        elif i == ">":
            if right_stack:
                right_popped = right_stack.pop()
                left_stack.append(right_popped)
        elif i == "-":
            if left_stack:
                left_stack.pop()
        else:
            left_stack.append(i)
            
    left_stack.extend(reversed(right_stack))
    print("".join(left_stack))

Swift

let testCase = Int(readLine()!)!

for _ in 1...testCase {
    let userInput = readLine()!
    var leftStack: [String] = []
    var rightStack: [String] = []
    for i in userInput {
        if i == "<" {
            if leftStack.isEmpty == false {
                let poppedLeftStack = leftStack.popLast()!
                rightStack.append(poppedLeftStack)
            }
        } else if i == ">" {
            if rightStack.isEmpty == false {
                let poppedRightStack = rightStack.popLast()!
                leftStack.append(poppedRightStack)
            }
        } else if i == "-" {
            if leftStack.isEmpty == false {
                leftStack.popLast()
            }
        } else {
            leftStack.append(String(i))
        }
    }
    rightStack.reverse()
    leftStack.append(contentsOf: rightStack)
    print(leftStack.joined(separator: ""))
}
profile
iOS Developer 🐢

0개의 댓글