백준 1963번
✔️ 문제 풀이
◾ 주어진 범위 내에서 소수를 먼저 구하고 시작
◾ bfs 활용
- 각각의 자리수의 값을 변경해가며 소수인지 아닌지 체크
- 소수이면서 방문한적 없는 숫자이면
dp 배열값을 변경해주고, 큐에 넣는다
- 팝된 수가 만들려고 했던 수와 일치하면
dp값 출력
최종 제출 코드
from collections import deque
import sys
input = sys.stdin.readline
primes =[False, False]+[True]*9998
for i in range(2, int(len(primes)**0.5)+1):
for j in range(i+i, len(primes), i):
if not primes[i]: break
primes[j] = False
n = int(input().rstrip())
for i in range(n):
start, end = map(int, input().split())
lists = [10000]*10000
lists[start] = 0
q = deque()
q.append(start)
while q:
number = q.popleft()
if number == end:
print(lists[number])
break
for i in range(4):
for j in range(10):
if i==3 and j==0:
continue
new_num = number//(10**(i+1))*10**(i+1)+(10**i)*j+number%(10**i)
if new_num == number:
continue
if lists[new_num] > lists[number] and primes[new_num]:
lists[new_num] = lists[number]+1
q.append(new_num)
✔️ 실행 결과
