[JAVA][Baekjoon] 2023번 신기한 소수

2025. 1. 4. 23:40·Coding Test/Baekjoon
728x90
반응형

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


📌 접근 방식

DFS(깊이 우선 탐색) 을 사용했다!

 

  • 한 자리씩 숫자를 추가하면서 신기한 소수를 탐색하기에 적합하기 때문
  • 숫자를 추가할 때마다 소수인지 확인하고, 조건에 맞지 않으면 더 이상 탐색하지 않는다.
    이렇게 하면 불필요한 연산을 줄일 수 있음! 🛠
  • example) 시작 숫자가 7이라면
    1️⃣ 7 → 소수 맞네! 더 탐색!
    2️⃣ 73 → 소수네? 한 자리 더 추가!
    3️⃣ 733 → 오, 또 소수야! 더 가보자!
    4️⃣ 7331 → 완성! 신기한 소수 발견! 🎉

 

 

[알고리즘] 깊이 우선 탐색 : DFS(Depth-First-Search)

📌  깊이 우선 탐색이란?그래프 탐색 기법그래프 완전 탐색 기법 중 하나그래프에서 시작 노드에서 출발하여 하나의 분기를 정해 최대 깊이까지 탐색이후, 탐색하지 않은 다른 분기로 이동해

nyeroni.tistory.com


✅ PASS CODE

import java.io.*;
import java.util.Scanner;

public class Main {
    public static int N;
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        DFS(2, 1);
        DFS(3, 1);
        DFS(5, 1);
        DFS(7, 1);
    }
    public static void DFS(int u, int v) {
        if(v == N) {
            if(isPrime(u)) {
                System.out.println(u);
            }
            return;
        }
        for(int i=1; i<10; i++) {
            if(i%2 == 0) {
                continue;
            }
            if(isPrime(u * 10 + i)) {
                DFS(u * 10 + i, v+1);
            }
        }
    }
    public static boolean isPrime(int num) {
        for(int i=2; i<=num/2; i++) {
            if(num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

 

🔑 핵심 포인트

1️⃣ u * 10 + i 로 소수 숫자를 늘려나감 예: 7 → 73 → 733.
2️⃣ 숫자가 소수인지 확인 후, 소수면 더 탐색한다.
3️⃣ 조건이 맞지 않으면 바로 return

 

⚡ 개선 가능점

num / 2 대신 Math.sqrt(num)을 사용할 수도 있을 것 같다!


반응형

😊 느낀 점

이 문제를 풀면서 DFS(깊이 우선 탐색) 을 활용해 효율적으로 숫자를 탐색하는 방법에 대해 깊이 생각해볼 수 있었다. 이렇게 조건을 미리 걸러내는 방식은 불필요한 연산을 줄이는 데 큰 도움이 되었고, 알고리즘의 효율성을 높이는 데도 중요한 요소임을 깨달았다!

처음에는 소수를 하나하나 비교하면서 어느 세월에 구하지..? 싶었는데 DFS를 이용하니까 훨씬 빠르게 탐색할 수 있었다! 덕분에 코드도 간결하게 구현할 수 있었고, 문제 해결 과정이 훨씬 재미있게 느껴졌다 👋🏻

 

728x90
반응형
저작자표시 비영리 변경금지

'Coding Test > Baekjoon' 카테고리의 다른 글

[JAVA][Baekjoon] 1260번 DFS와 BFS 🌟  (0) 2025.01.06
[JAVA][Baekjoon] 13023번 ABCDE 🌟🌟  (2) 2025.01.05
[JAVA][Baekjoon] 10989번 수 정렬하기 3 🌟  (0) 2025.01.04
[JAVA][Baekjoon] 10989번 수 정렬하기 3 🌟🌟🌟🌟🌟  (2) 2025.01.03
[JAVA][Baekjoon] 1517번 버블 소트 🌟🌟🌟  (0) 2025.01.03
'Coding Test/Baekjoon' 카테고리의 다른 글
  • [JAVA][Baekjoon] 1260번 DFS와 BFS 🌟
  • [JAVA][Baekjoon] 13023번 ABCDE 🌟🌟
  • [JAVA][Baekjoon] 10989번 수 정렬하기 3 🌟
  • [JAVA][Baekjoon] 10989번 수 정렬하기 3 🌟🌟🌟🌟🌟
예롱메롱
예롱메롱
  • 예롱메롱
    예롱이의 개발 블로그
    예롱메롱
  • 전체
    오늘
    어제
    • 전체보기 (274)
      • 프로젝트 (35)
        • Wedle (12)
        • 인스타그램 클론 코딩 (13)
        • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (10)
      • 인프런 Spring 강의 정리 (79)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (7)
        • Spring 핵심 원리 - 기본편 (9)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (8)
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편 (11)
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리.. (6)
        • 실전! 스프링 부트와 JPA 활용2 - API 개.. (5)
        • 실전! 스프링 데이터 JPA (7)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (7)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (11)
        • 실전! Querydsl (8)
      • Cloud (3)
      • Spring (6)
        • spring boot (5)
        • 소셜로그인 (1)
      • Docker (2)
      • DevOps (0)
      • Coding Test (114)
        • Programmers (37)
        • Baekjoon (76)
      • KB It's Your Life 6기 (1)
      • CS (18)
        • 알고리즘 (13)
        • 컴퓨터 구조 (1)
        • Operating System (0)
        • Network (0)
        • Database (4)
      • git (1)
      • Language (15)
        • Java (5)
        • C++ (6)
        • Python (4)
    • GITHUB GITHUB
    • INSTAGRAM INSTAGRAM
  • hELLO· Designed By정상우.v4.10.3
예롱메롱
[JAVA][Baekjoon] 2023번 신기한 소수
상단으로

티스토리툴바