๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿƒ algorithm/boj

BOJ 1963 - ์†Œ์ˆ˜ ๊ฒฝ๋กœ

by HandHand 2021. 3. 18.

๋ฌธ์ œ

๋ฐฑ์ค€ ์˜จ๋ผ์ธ ์ €์ง€ - 1963๋ฒˆ

ํ’€์ด ๊ณผ์ •

๋ชฉํ‘œ ์ง€์ ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ BFS ๋ฅผ ํ†ตํ•ด ๋‹ต์„ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„  ํ˜„์žฌ ์ˆซ์ž์—์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ž๋ฆฌ์ˆ˜๋Š” ์ด 4๊ฐœ์ด๋ฏ€๋กœ ๊ฐ ์ž๋ฆฌ์ˆ˜์— 0~9์˜ ์ˆซ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด๋ณด๋ฉฐ
๊ทธ๋กœ ์ธํ•ด ์ƒ์„ฑ๋œ ์ˆซ์ž๊ฐ€ ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ ํ์— ๋„ฃ์–ด์คฌ์Šต๋‹ˆ๋‹ค.
์ด๋•Œ ์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ O(root(N)) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์ฃผ์–ด์ง„ ์ œํ•œ ์‹œ๊ฐ„๋‚ด์— ์ถฉ๋ถ„ํžˆ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ


import sys
from collections import deque


def is_prime(n):
    if n <= 1:
        return False
    if n == 2:
        return True

    if n % 2 == 0:
        return False

    sqrtn = int(n**0.5)
    for div in range(3, sqrtn+1, 2):
        if n % div == 0:
            return False

    return True


def bfs(start, goal):
    q = deque()
    visit = [0 for _ in range(10000)]

    q.append((start, 0))
    visit[start] = 1

    while q:
        here, cost = q.popleft()
        if here == goal:
            return cost

        temp = str(here)
        for idx, digit in enumerate(temp):

            for n in range(10):
                if n != int(digit):
                    new = temp[:idx] + str(n) + temp[idx+1:]
                    if is_prime(int(new)) and not visit[int(new)]:
                        q.append((int(new), cost + 1))
                        visit[int(new)] = 1

    return 'Impossible'


if __name__ == '__main__':
    T = int(input())
    for case in range(T):
        frm, to = list(map(int, sys.stdin.readline().split()))
        ret = bfs(frm, to)
        print(ret)
๋ฐ˜์‘ํ˜•

'๐Ÿƒ algorithm > boj' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ 16397 - ํƒˆ์ถœ  (0) 2021.03.18
BOJ 2563 - ์ƒ‰์ข…์ด  (0) 2021.03.18
BOJ 4195 - ์นœ๊ตฌ ๋„คํŠธ์›Œํฌ  (0) 2021.03.18
BOJ 17626 - Four Squares  (0) 2021.03.18
BOJ 1303 - ์ „์Ÿ - ์ „ํˆฌ  (0) 2021.03.18

๐Ÿ’ฌ ๋Œ“๊ธ€