선릉역 1번 출구

baekjoon - 1406 본문

Algorithm/Algorithm 문제풀이

baekjoon - 1406

choideu 2021. 8. 30. 02:22
from sys import stdin 

word = list(stdin.readline().strip())
word2 = []

num = int(stdin.readline())

for i in range(num):
    command = stdin.readline().strip()
    if command[0] == "P":
        word.append(command[2])
    elif command[0] == "B":
        if word:
            word.pop()
        else:
            continue
    elif command[0] == "D":
        if word2:
            word.append(word2.pop())
        else:
            continue
    elif command[0] == 'L':
        if word:
            word2.append(word.pop())

print(''.join(word+list(reversed(word2))))

*일단 입력 받는 걸 input().split() 사용하지말고 import sys를 해서 sys.stdin.readline()을 사용하자

그리고 stdin.readline().strip()은 공백도 인식해서 index값으로 1이 아닌 2을 넣어주었다.

->이거 때문에 맨날 시간초과 뜨는듯

이 문제 정답 비율이 27%밖에 안돼서 어떻게 풀어야되지 고민을 했는데 내가 생각해낸 건 두 개의 stack을 사용하는 거였다. 

그래서 L명령어가 들어오면 stack의 top을 pop해서 다른 stack(2)에 넣게, D명령어가 들어오면 다른 stack(2)에서 명령을 pop해서 가져오게, B명령어가 들어오면 stack(1)에서 pop()해서 지우고 P $는 stack(1)에 append만 하면 된다.

결론: 이 문제의 키 포인트는 커서가 stack(1)의 top을 위치하도록 유지하는 것이다. 

 

 

'Algorithm > Algorithm 문제풀이' 카테고리의 다른 글

baekjoon - 10866  (0) 2021.08.30
baekjoon - 10845  (0) 2021.08.30
baekjoon - 1874  (0) 2021.08.28
baekjoon - 9012  (0) 2021.08.28
baekjoon - 9093  (0) 2021.08.28
Comments