본문 바로가기

알고리즘/백준

[백준] 1963번 : 소수경로

728x90

1963번: 소수 경로

 

1963번: 소수 경로

소수를 유난히도 좋아하는 창영이는 게임 아이디 비밀번호를 4자리 ‘소수’로 정해놓았다. 어느 날 창영이는 친한 친구와 대화를 나누었는데: “이제 슬슬 비번 바꿀 때도 됐잖아” “응 지금

www.acmicpc.net

🤔 문제분석

모든 숫자를 대입해보면서(완전탐색) 소수이고 방문하지 않는 소수만 방문해(너비우선탐색)나아가면서 문제를 해결하면 된다. 4자리 숫자이기 때문에 시간내에 문제를 해결 할 수 있습니다.

  • 참고 : 소수를 판별하는 방법은 제곱근의 수 + 1 만큼만 비교하면 된다. (에라토스테네스의 체)

💻 코드

import sys
input = sys.stdin.readline
from collections import deque

def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True

for _ in range(int(input())):
    num1, num2 = map(int, input().split())
    visited = set([num1])
    queue = deque()
    queue.append((num1, 0))
    while queue:
        num, cost = queue.popleft()
        if num == num2:
            print(cost)
            
        for n in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
            for i in range(4):
                temp = list(str(num))
                if temp[i] != str(n):
                    temp[i] = str(n)
                    new_number = int(''.join(temp))
                    if new_number >= 1000 and is_prime(new_number):
                        if not new_number in visited:
                            visited.add(new_number)
                            queue.append((new_number, cost + 1))
728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1956 : 운동  (1) 2024.03.18
[백준] 4386번 : 별자리 만들기  (0) 2024.03.18
[백준] 6593번 : 상범 빌딩  (0) 2024.03.18
[백준] 2458번 : 키 순서  (1) 2024.03.16
[백준] 1865번 : 웜홀  (0) 2024.03.10