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
- 생활코딩
- 종만북
- Python
- 정수론
- Cleancode
- 따라하며 배우는 C언어
- Algorithm
- Math
- udemy
- server
- String
- web
- JavaScript
- C
- Algospot
- BASIC
- sorting
- greedy
- 백준
- 인프런
- programmers
- BOJ
- DP
- C언어
- 따배씨
- 따라하면서 배우는 C언어
- BFS
- dfs
- php
- graph
Archives
- Today
- Total
몽상실현개발주의
[BOJ] 1963 / 소수 경로 / Python 파이썬 본문
[BOJ] 1963 / 소수 경로 / Python 파이썬
https://www.acmicpc.net/problem/1963
풀이
[BOJ] 1963 / 숨바꼭질 문제와 유사한 문제였다.
BFS 로 완전탐색을 하면서 memoization 으로 중복 탐색하는 경우를 제거하여 풀이하였다.
소수 판단은 "에라토스테네스의 체" 로 미리 만들어 주었고,
새롭게 생성되는 비밀번호는 자리수별로 0~9까지 변경하여 만들어 주었다.
from collections import deque
# 에라토스테네스의 체
def makePrime():
nums = [1] * 10000
nums[0] = 0
nums[1] = 0
for i in range(2, 10000):
if nums[i]:
for j in range(i, 10000, i):
if i == j:
continue
nums[j] = 0
return nums
primes = makePrime()
case = int(input())
for _ in range(case):
A, B = map(int, input().split())
if A == B:
print(0)
continue
if A > B:
A, B = B, A
queue = deque()
queue.append(A)
check = [0] * 10000
check[A] = 1
while True:
Q = queue.popleft()
if Q == B:
print(check[Q]-1)
break
# 자리수
for i in range(4):
# 변경 숫자 0~9
for j in range(10):
if i == 0 and j == 0:
continue
nextQ = list(str(Q))
nextQ[i] = str(j)
nextQ = int("".join(nextQ))
# 가능한 비밀번호 조건
if primes[nextQ] and not check[nextQ]:
check[nextQ] = check[Q] + 1
queue.append(nextQ)
'Algorithm PS > BOJ' 카테고리의 다른 글
[BOJ] 9019 / DSLR / Python 파이썬 (0) | 2021.07.27 |
---|---|
[BOJ] 1697 / 숨바꼭질 / python 파이썬 (0) | 2021.07.25 |
[BOJ] 10971 / 외판원 순회2 / Python 파이썬 (0) | 2021.07.25 |
[BOJ] 10819 / 차이를 최대로 / Python 파이썬 (0) | 2021.07.19 |
[BOJ] 9095 / 1, 2, 3 더하기 / Python 파이썬 (0) | 2021.07.19 |
Comments