Carnival7
Change Developer
Carnival7
전체 방문자
오늘
어제
  • 분류 전체보기
    • 자바의 정석
    • 프로그래밍 언어별 tools
      • 파이썬
      • 자바
    • 코딩 테스트
      • 백준 강의 기초편
      • 백준 강의 연습편
      • 백준 강의 문제편
      • 삼성 기출
      • 백준 - 일반
      • 카카오 기출
      • 프로그래머스 - 일반
      • 코테 풀이 Tools
    • CS
      • Network
      • 운영체제
      • 알고리즘
      • DB
    • Web_Backend
      • Spring
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
      • 스프링 핵심 원리 - 기본편
    • DevOps
    • IT 업무 지식
      • 인프라
      • 클라우드
    • 자격증
      • AWS - CLF
      • 정처기 - 실기
    • 생각 정리

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩테스트 #삼성기출 #구현 #시뮬레이션
  • 스프링 #AOP
  • 삼성기출 #백준강의문제편
  • 스프링 #인터셉터 #AOP #필터
  • 프로그래머스 #카카오기출 #레벨2
  • Github Actions
  • 알고리즘 #백준강의기초편 #코딩테스트
  • DevOps
  • 삼성기출 #2023 #상반기
  • 스프링 부트 무중단 웹 서비스
  • 슬라이딩 윈도우
  • nginx
  • ci/cd
  • DMZ
  • 슬라이딩 윈도우 #덱
  • code deploy

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Carnival7

Change Developer

코딩 테스트/백준 강의 연습편

BFS) 1963. 소수 경로

2022. 6. 10. 17:24

https://www.acmicpc.net/problem/1963

 

1963번: 소수 경로

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

www.acmicpc.net

# solution 1.
# 모든 경우의 수를 전부 찾는 완전탐색이면서 BFS를 사용한 문제이다.
#
# 우선 네 자리 수인 9999까지의 모든 수를 완전탐색을 통해서 소수인지 판별을 한다.
#
# 그 다음은 각 자리수마다 숫자(0 ~ 9)를 바꾸어 가며 소수인 수는 큐에 넣어서 또 다시 자릿수를 바꾸어 가며 바꾸어야 하는 숫자가 나올 때 판별한다.
#
# 이 때 다음과 같은 조건을 생각해야 한다.
#
# 큐에 넣은 숫자는 방문 처리를 한다. (visited) - 카운트 중복 방지
# 과정 중에는 네 자리 숫자를 유지해야 하므로 바꾼 숫자가 1000이상인지 확인한다.

from collections import deque

MAX=10000

# 에라토스테네스의 체
def get_primes(n):
    a=[True]*(MAX+1)
    for i in range(2, n + 1):
        if a[i]:
            for j in range(2 * i, n + 1, i):
                a[j] = False

    return a

t=int(input())
a=get_primes(MAX)
for _ in range(t):
    s,e=map(int,input().split())

    check=[False]*(MAX+1)

    q=deque()
    q.append((s,0))
    check[s]=True
    ok=False

    while q:
        now,cnt=q.popleft()
        # 빼낸 값이 end면 cnt 프린트
        if now==e:
            print(cnt)
            ok=True
            break
        # now를 숫자에서 문자로 변환
        str_now=str(now)
        # 각 자리에 0 ~ 9를 넣어가며 소수인지 확인
        for digit in range(4):
            for num in range(10):
                next = int(str(str_now[:digit])+str(num)+str(str_now[digit+1:]))
                # 방문 X, 소수 O, 1000이상인 숫자
                if next>=1000 and not check[next] and a[next]:
                    q.append((next,cnt+1))
                    check[now]=True

    if not ok:
        print("Impossible")

# 참고 https://cijbest.tistory.com/13

'코딩 테스트 > 백준 강의 연습편' 카테고리의 다른 글

BFS) 14395. 4연산  (0) 2022.06.11
BFS) 10026.적록색약  (0) 2022.06.10
BFS) 6087.레이저 통신  (0) 2022.06.09
시뮬레이션과 구현) 16974.레벨 햄버거  (0) 2022.06.09
브루트포스) 16198.에너지 모으기  (0) 2022.06.07
    '코딩 테스트/백준 강의 연습편' 카테고리의 다른 글
    • BFS) 14395. 4연산
    • BFS) 10026.적록색약
    • BFS) 6087.레이저 통신
    • 시뮬레이션과 구현) 16974.레벨 햄버거
    Carnival7
    Carnival7

    티스토리툴바