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 | 31 |
Tags
- Charfield
- 백준 다리놓기
- 백준 7576번
- Django
- lgh
- 문제풀이
- linc3.0
- 고속거듭제곱알고리즘
- 백준 7576
- 16953
- PS
- ncloud서버
- 백준 1158
- 경상국립대학교
- 1010번: 다리 놓기 (Python)
- 다리 놓기
- max_length
- 7576번
- ncp배포
- 백준 1158번
- 9735번
- 5397
- 요세푸스 문제
- epsp
- json
- NaverCloudPlatform
- 백준 토마토
- 그래프 탐색
- 백준
- python
Archives
- Today
- Total
DolphinDash
백준 5397번: 키로거 (Python) 본문
접근 방식에 대해 고민을 하게 만드는 문제.
Deque! (덱! 덱이라고! 덱!) 우린 파이썬을 사용하니 문제에 따라 효율적인 방식을 선택할 수 있다.
커서를 움직인다고 생각하더라도 pop(0)일 경우 시간복잡도가 O(n)이기때문에 시간초과가 될 수 있다.
그러므로 우리는 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 |