[C++] 백준/Gold/2023. 신기한 소수

2025. 3. 12. 20:46·C++/Algorithm

문제: 신기한 소수 (백준 2023번)

문제 분석

문제 개요:
길이가 nn인 신기한 소수를 찾는 문제로,
신기한 소수란 왼쪽부터 한 자리씩 늘려가며 만들어지는 모든 접두사가 소수인 수이다.
예를 들어, 73317331의 경우, 77, 7373, 733733, 73317331 모두 소수여야 한다.

접근 방법:

  1. 백트래킹(Backtracking) 사용:
    • 재귀를 통해 자릿수를 늘려가며 후보 숫자를 구성한다.
    • 각 단계마다 현재까지 구성된 숫자가 소수인지 판별하고, 소수가 아니면 더 이상 진행하지 않는다.
  2. 소수 판별 함수:
    • 입력된 수가 소수인지 확인하기 위해 22부터 $\sqrt{num}$ 까지의 나눗셈으로 판별한다.
  3. 문자열 활용:
    • 숫자를 문자열로 조작한 후, stoi 함수를 통해 정수로 변환하여 소수 여부를 확인한다.

전체 코드

#include <bits/stdc++.h>
using namespace std;

int n;
string s = ""; // 현재까지의 숫자 조합

// 소수 판별 함수: num이 소수이면 true 반환
bool IsPrime(int num)
{
    if (num < 2) return false;
    for (int i = 2; i * i <= num; i++)
    {
        if (num % i == 0) return false;
    }
    return true;
}

// 백트래킹 함수: depth는 현재 자릿수
void BackTacking(int depth)
{
    if (depth == n)
    {
        cout << s << '\n';
        return;
    }
    // '1'부터 '9'까지의 숫자를 시도
    for (char i = '1'; i <= '9'; i++)
    {
        s += i; // 현재 후보 숫자 추가
        // 현재까지의 숫자가 소수라면 다음 자릿수로 진행
        if (IsPrime(stoi(s)))
        {
            BackTacking(depth + 1);
        }
        s.pop_back(); // 후보 숫자 제거 후 다른 숫자 시도
    }
}

int main()
{
    ios::sync_with_stdio(0); 
    cin.tie(0);
    
    cin >> n;
    BackTacking(0);
}

 

'C++ > Algorithm' 카테고리의 다른 글

[C++] 백준/Gold/1915. 가장 큰 정사각형  (0) 2025.03.14
[C++] 백준/Gold/1253. 좋다  (0) 2025.03.13
[C++] 백준/Gold/14719. 빗물  (0) 2025.03.11
[C++] 백준/Gold/27172. 수 나누기 게임  (0) 2025.03.10
[C++] 백준/Silver/1487. 물건 팔기  (0) 2025.03.05
'C++/Algorithm' 카테고리의 다른 글
  • [C++] 백준/Gold/1915. 가장 큰 정사각형
  • [C++] 백준/Gold/1253. 좋다
  • [C++] 백준/Gold/14719. 빗물
  • [C++] 백준/Gold/27172. 수 나누기 게임
돼지표
돼지표
https://github.com/wkdgns135
  • 돼지표
    돼지표 개발 스토리
    돼지표
  • 전체
    오늘
    어제
    • 분류 전체보기 (99)
      • C++ (58)
        • Algorithm (52)
      • Python (1)
      • Machine Learning (2)
      • Computer Graphics (4)
        • Curly Hair Simulation (2)
      • GPU Programming (11)
        • CUDA basic (7)
        • CUDA fluidsGL (4)
      • Unreal 5 (20)
        • Troubleshooting (4)
        • FPS Shooting (5)
        • Study (9)
        • EOS (1)
      • Computer Science (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    OpenGL
    CUDA
    수학
    그래프 탐색
    Algorithm
    unreal 5
    GPU Programming
    구현
    CS
    FPS
    dp
    BFS
    그리디 알고리즘
    C++
    위상 정렬
    자료 구조
    Rendering Pipeline
    아이작 맵 생성
    Fluid Simulation
    UE5
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
돼지표
[C++] 백준/Gold/2023. 신기한 소수
상단으로

티스토리툴바