Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 수들의 합 4
- max_length
- 20492
- 정보 상인 호석
- PS
- 10986
- ncloud서버
- lgh
- 백준
- 삼각형
- 1010번: 다리 놓기 Python
- 별찍기 -10
- python
- 고속거듭제곱알고리즘
- 백준 티스토리
- 삼각형 각도
- ncp배포
- 9735번
- 22252
- linc3.0
- Charfield
- json
- 22986
- epsp
- 문제풀이
- 나머지합
- 파이썬
- Django
- 15681
- 백준 블로그
Archives
- Today
- Total
DolphinDash
백준 5397번: 키로거 Python 본문
5397번: 키로거
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. 1≤L≤1,000,000 강산이가 백스페이스를 입
www.acmicpc.net
접근 방식에 대해 고민을 하게 만드는 문제.


Deque! 덱!덱이라고!덱! 우린 파이썬을 사용하니 문제에 따라 효율적인 방식을 선택할 수 있다.


커서를 움직인다고 생각하더라도 pop0일 경우 시간복잡도가 On이기때문에 시간초과가 될 수 있다.
그러므로 우리는 deque로 2개의 큐에다가 나눠 움직이는것처럼 만들어주면 된다.
여기서 deque 2개를 생성하고 문자열에 맞게 함수를 실행해도 되지만 Cursor라는 클래스가 있다고 생각하고 만들면 좀 더 보기에도 멋있고 이해하기도 더 쉬운 코드가 된다.
import sys
sys.stdin.readline
from collections import deque
class Cursor:
def __init__(self) -> None:
self.left = deque([])
self.right = deque([])
def put_string(self, option: str):
try:
if option == '<': self.right.appendleft(self.left.pop())
elif option == '>': self.left.append(self.right.popleft())
elif option == '-': self.left.pop()
else: self.left.append(option)
except:
pass
def make_pair(self) -> str:
return ''.join(self.left + self.right)
n = int(input())
for _ in range(n):
c = Cursor()
string = input().rstrip()
for i in string:
c.put_string(i)
print(c.make_pair())
이 코드엔 또다른 디테일이 숨겨져있는데,
try:
if option == '<': self.right.appendleft(self.left.pop())
elif option == '>': self.left.append(self.right.popleft())
elif option == '-': self.left.pop()
else: self.left.append(option)
except:
pass
try-except 디테일무엇;; 이 코드를 보고 감격스러웠다. 어쩔 수 없이 코뽕이 와서 새벽이라도 이 글을 쓸 수 밖에 없었다.
내가 썼다기엔 너무 멋진 코드가 되었다. 멋있는 코드가 내 머리 속에 와서 깊게 박히는 느낌. 정말 감사하다.
멋진 강의로 인해 알게된 문제인데 동기부여가 많이 된다. 감사합니다 민재사마. 이 게시물의 영광을 그에게.
'PS > Solve' 카테고리의 다른 글
백준 1010번: 다리 놓기 Python 0 | 2023.05.23 |
---|---|
백준 1991번: 트리 순회 Python 0 | 2023.05.20 |
백준 16953번: A → B Python 0 | 2023.05.19 |
백준 1629번: 곱셈 Python 0 | 2023.04.06 |
백준 9735번: 삼차 방정식 풀기 Python 0 | 2023.04.05 |