1963 - 소수 경로
📚 1963 - 소수 경로
이해
이 문제는 에라토스테네스의 체를 이용한 후, bfs를 이용하여 문제를 풀면된다.
파이썬에서는 문자열합칠 때는 +
를 이용하면 쉽게 합칠 수 있다.
temp = int(strNow[:i] + str(j) + strNow[i + 1:])
다만, 이 문제에서 불가능한 경우 Impossible
이 아닌 0으로 결과를 처리해야 한다.
소스
import sys
from collections import deque
read = sys.stdin.readline
t = int(read())
# 소수 구하기
decimal_number = [True] * 10000
def decimal_function():
for i in range(2, 10000):
if decimal_number[i]:
for j in range(i + i, 10000, i):
decimal_number[j] = False
decimal_function()
def bfs():
queue = deque()
queue.append((a, 0))
visited = [False] * 10010
while queue:
now, cnt = queue.popleft()
strNow = str(now)
if now == b:
return cnt
for i in range(4):
for j in range(10):
temp = int(strNow[:i] + str(j) + strNow[i + 1:])
if not visited[temp] and decimal_number[temp] and temp >= 1000:
visited[temp] = True
queue.append((temp, cnt + 1))
while t > 0:
a, b = map(int, read().split())
result = bfs()
if not result:
print(0) # Impossible
else:
print(result)
t -= 1
채점 결과
Author And Source
이 문제에 관하여(1963 - 소수 경로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@chang626/1963-소수-경로저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)