백준#5397 키로거

정은경·2020년 3월 8일
0

백준 문제풀이

목록 보기
2/51

1. 문제

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

  • Medium / 스택,구현,그리디 / 40분 컷

2. 나의 풀이

count = int(input())

for _ in range(count):
    case = [_ for _ in input()]
    left_stack, right_stack = [], []

    for char in case:
        if char == ">":
            if right_stack:
                left_stack.append(right_stack.pop())
        elif char == "<":
            if left_stack:
                right_stack.append(left_stack.pop())
        elif char == "-":
            if left_stack:
                left_stack.pop()
        else:
            left_stack.append(char)
    left_stack += right_stack[::-1]
    print(''.join(left_stack))

3. 남의 풀이

3-1.

from sys import stdin

for _ in range(int(stdin.readline())):
    typing = stdin.readline().strip()
    left, right = [], []
    for type in typing:
        if type == '<':
            if left:
                right.append(left.pop())
        elif type == '>':
            if right:
                left.append(right.pop())
        elif type == '-':
            if left:
                left.pop()
        else:
            left.append(type)
    left.extend(reversed(right))
    print(''.join(left))

3-2.

test_case = int(input())

for _ in range(test_case):
    left_stack = []
    right_stack = []
    data = input()
    for i in data:
        if i == '-':
            if left_stack:
                left_stack.pop()
        elif i == '<':
            if left_stack:
                right_stack.append(left_stack.pop())
        elif i == '>':
            if right_stack:
                left_stack.append(right_stack.pop())
        else:
            left_stack.append(i)
    left_stack.extend(reversed(right_stack))
    print(''.join(left_stack))

4. 느낀 점

  • 스택을 이용한 문제풀이에 자신감 쌓아가는 중!
profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글