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
- String
- 종만북
- Math
- Cleancode
- C언어
- Algospot
- sorting
- 따배씨
- programmers
- greedy
- server
- udemy
- 정수론
- BOJ
- 따라하면서 배우는 C언어
- 인프런
- 백준
- dfs
- BASIC
- BFS
- C
- Algorithm
- web
- 생활코딩
- graph
- 따라하며 배우는 C언어
- DP
- JavaScript
- php
- Python
Archives
- Today
- Total
몽상실현개발주의
[BOJ] 9019 / DSLR / Python 파이썬 본문
[BOJ] 9019 / DSLR / Python 파이썬
https://www.acmicpc.net/problem/9019
풀이
전형적인 Queue 를 사용한 BFS 문제라고 생각하였다가 시간초과로 꽤나 고생을 하였다.
풀고나니 파이썬으로는 해결이 불가능 하다고 결론을 내었지만 그래도 배울것이 많은 문제였다.
- List 로 visted 를 만드는 것보다, set 이 더 빠르다.
- List 에서 in 을 사용하는 탐색은 O(n) -> list 의 index 로 탐색하여야 유리하다.
- Set 에서 in 을 사용하는 탐색은 O(1)
- 숫자의 자리수를 변경 할때, 수식을 이용하자
- 문자열로 처리한후 다시 int 바꾸는것이 생각보다 시간을 잡아 먹는다.
deque 를 이용하여 구현하였지만, 시간초과가 나시는 분들은 python 아닌 Pypy3 로 체점해 보시길...
from collections import deque
case = int(input())
for _ in range(case):
A, B = map(int, input().split())
visited = set()
queue = deque()
queue.append((A, ""))
while True:
Q, command = queue.popleft()
if Q == B:
print(command)
break
doubleQ = (Q*2) % 10000
if doubleQ not in visited:
visited.add(doubleQ)
queue.append((doubleQ, command + "D"))
mQ = Q-1 if Q != 0 else 9999
if mQ not in visited:
visited.add(mQ)
queue.append((mQ, command + "S"))
LQ = (Q % 1000) * 10 + (Q//1000)
if LQ not in visited:
visited.add(LQ)
queue.append((LQ, command + "L"))
RQ = (Q % 10) * 1000 + (Q//10)
if RQ not in visited:
visited.add(RQ)
queue.append((RQ, command + "R"))
참고 블로그
https://paris-in-the-rain.tistory.com/94
'Algorithm PS > BOJ' 카테고리의 다른 글
[BOJ] 2251 / 물통 / Python 파이썬 (0) | 2021.08.01 |
---|---|
[BOJ] 1525 / 퍼즐 / Python 파이썬 (0) | 2021.07.28 |
[BOJ] 1697 / 숨바꼭질 / python 파이썬 (0) | 2021.07.25 |
[BOJ] 1963 / 소수 경로 / Python 파이썬 (0) | 2021.07.25 |
[BOJ] 10971 / 외판원 순회2 / Python 파이썬 (0) | 2021.07.25 |
Comments