본문 바로가기
JAVA/Coding Test Study

[Lv.2] 소수 찾기 : Java

by ♡˖GYURI˖♡ 2024. 4. 2.
728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

어제 풀었던 소수 찾기 Lv.1 문제와 유사하다고 생각하고 자신만만하게 풀이 시작... 과 동시에 실패!

 

[Lv.1] 소수 찾기 : Java

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이해하

newbie-in-softengineering.tistory.com

 

순열로 접근했지만 이 문제는 dfs 문제였던 것...

항상 완전탐색 문제만 보면 순열인가?? 싶어서 바로 풀이를 시작하는데, 대부분의 경우 dfs 문제였다.

앞으로는 완탐 문제 → dfs 풀이! 로 해봐야지 ㅜㅅㅜ

 

참고한 블로그는 여기

 

[Java/자바] 프로그래머스 Lv2 - 소수 찾기 (완전탐색/DFS)

문제 설명 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을

hstory0208.tistory.com

 

  • 조합된 숫자 중 중복이 있으면 안되니 Set 사용
  • 이미 조합한 수는 조합하지 않도록 boolean[] visited 배열 선언
    • numbers의 최대길이는 7이니 visited도 최대길이인 7로 설정
  • dfs로 모든 숫자 조합을 만듦
  • 에라토스테네스의 체(Math.sqrt(n))을 이용하여 소수 판별

 

dfs만 빼면 Lv.1 소수찾기와 똑같은 문제였다.

 

 

문제풀이

import java.util.*;

class Solution {
    static Set<Integer> set;
    static boolean[] visited = new boolean[7];

    public int solution(String numbers) {
        int answer = 0;
        set = new HashSet<>();
        dfs(numbers, "", 0);

        for (Integer num : set) {
            if (isPrime(num)) {
                answer++;
            }
        }

        return answer;
    }

    public void dfs(String numbers, String s, int depth) {
        if (depth > numbers.length()) {
            return;
        }

        for (int i = 0; i < numbers.length(); i++) {
            if (!visited[i]) {
                visited[i] = true;
                set.add(Integer.parseInt(s + numbers.charAt(i)));
                dfs(numbers, s + numbers.charAt(i), depth + 1);
                visited[i] = false;
            }
        }
    }

    public boolean isPrime(int n) {
        if (n < 2) {
            return false;
        }

        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) {
                return false;
            }
        }

        return true;
    }
}

 

bfs보다 dfs가 더 어렵게 느껴진다... 문제라도 계속 풀어봐야지

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

[Lv.2] 시소 짝꿍 : Java  (0) 2024.04.03
[Lv.3] 불량 사용자 : Java  (0) 2024.04.02
[Lv.1] 키패드 누르기 : Java  (0) 2024.04.02
[Lv.1] 모의고사 : Java  (1) 2024.04.01
[Lv.1] 소수 찾기 : Java  (0) 2024.04.01