[백준] 2023번: 신기한 소수 - Kotlin[코틀린]

2024. 4. 17. 20:25·알고리즘/Baekjoon

문제

 

 

2023번: 신기한 소수

수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다. 7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수

www.acmicpc.net

 


풀이

 

 입력받은 자릿수의 모든 수를 차례대로 소수 판정하는 것은 시간이 오래걸린다. 대신, 신기한 소수는 왼쪽의 한 자리 수부터 소수여야 한다는 점을 이용하여 경우의 수를 줄일 수 있다. 백트래킹을 이용해 현재 소수인 수들만 다음 자리수를 더한 소수를 찾는 탐색을 진행하면된다.

 

 먼저 신기한 소수가 되려면 첫째 자리 수가 소수인 2, 3, 5, 7 중 하나여야 한다. 그 외의 수로 시작하는 수는 다음 단계로 진행하지 않는다. 예를 들어 첫째 자리가 2인 경우에 0부터 9까지 다음 자릿수를 더해주고 소수를 찾는다. 23과 29가 소수이고 세 자리 소수를 찾는 단계로 진행할 수 있는 수가 된다.

 

 찾으려는 자릿수에 도달하면 최종적으로 소수인지 판별하고 출력해주면 된다.

 


 

코드

 

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

    val num = br.readLine().toInt()
    val sb = StringBuilder()

    fun isPrime(num: Int): Boolean {
        for(i in 2 until num) { // 약수가 있으면 소수가 아님
            if (num % i == 0) return false
        }
        return num > 1 // 1은 소수가 아님
    }

    fun checkNum(cur: Int, num: Int) {
        if(num == 0) {
            if(isPrime(cur)) sb.append("$cur\n")
            return
        }
        for(i in 0 until 10) {
            val next = cur*10 + i // 다음 자릿수를 더한 수
            if(isPrime(next)) checkNum(next, num-1)
        }
    }

    checkNum(0, num)

    bw.write(sb.toString())
    bw.flush()
    bw.close()
    br.close()
}

 

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

[백준] 3184번: 양 - Kotlin[코틀린]  (1) 2024.04.25
[백준] 15903번: 카드 합체 놀이 - Kotlin[코틀린]  (0) 2024.04.16
[백준] 11441번: 합 구하기 - Kotlin[코틀린]  (0) 2024.04.09
[백준] 11047번: 동전 0 - Kotlin[코틀린]  (0) 2024.04.01
[백준] 5052번: 전화번호 목록 - Kotlin[코틀린]  (0) 2024.03.27
'알고리즘/Baekjoon' 카테고리의 다른 글
  • [백준] 3184번: 양 - Kotlin[코틀린]
  • [백준] 15903번: 카드 합체 놀이 - Kotlin[코틀린]
  • [백준] 11441번: 합 구하기 - Kotlin[코틀린]
  • [백준] 11047번: 동전 0 - Kotlin[코틀린]
junghoooooon
junghoooooon
  • junghoooooon
    코드팁스
    junghoooooon
  • 전체
    오늘
    어제
    • 전체 (120)
      • 안드로이드 (0)
        • 코드팁스 (0)
      • 유니티 (0)
        • 코드팁스 (0)
      • 알고리즘 (118)
        • 알고리즘 (0)
        • Baekjoon (118)
      • GitHub (0)
      • 티스토리 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      그래프 탐색
      프림
      이분 탐색
      에라토스테네스의 체
      유니온파인드
      피보나치
      큐
      티스토리
      BFS
      DP
      크루스칼
      백트래킹
      브루트포스
      투 포인터
      스택
      수학
      재귀
      모듈러 곱셈 역원
      dfs
      우선순위 큐
      누적 합
      그래프이론
      소수 판정
      분리집합
      구현
      분할 정복
      문자열
      정렬
      그리디
      MST
    • hELLO· Designed By정상우.v4.10.2
    junghoooooon
    [백준] 2023번: 신기한 소수 - Kotlin[코틀린]
    상단으로

    티스토리툴바