ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ’กRemark
DFS ์žฌ๊ท€ ํ˜ธ์ถœ ์‹œ ๋ณ€๋™์ด ์žˆ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์„ ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ•  ๋•Œ์—๋Š” ๋งค๋ฒˆ ํ•˜๋‚˜์˜ root ์—์„œ ์‚ด์„ ๋ถ™์ด๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, root ์ž์ฒด์— ๋ณ€ํ™”๋ฅผ ์ฃผ๋ฉด ์•ˆ๋˜๊ณ  root ์— ์‚ด์„ ํ•˜๋‚˜ ๋ถ™์ธ ๊ฐ’์— ๋Œ€ํ•ด ์žฌ๊ท€ ํ˜ธ์ถœํ•˜๊ณ , ๋‹ค์‹œ root ๊ทธ๋Œ€๋กœ์— ๋‹ค๋ฅธ ์‚ด ํ•˜๋‚˜๋ฅผ ๋ถ™์ธ ๊ฐ’์„ ์žฌ๊ท€ ํ˜ธ์ถœํ•˜๋Š” ์‹์œผ๋กœ root ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒจ์„œ๋Š” ์•ˆ๋˜๊ณ  ๋งค๊ฐœ ๋ณ€์ˆ˜์—๋งŒ ๋ณ€ํ™”๋˜๋Š” ๋ชจ์–‘์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/42839

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

์ฝ”๋“œ

์†Œ์ˆ˜ ์ฐพ๊ธฐ ๋ฌธ์ œ๋Š” DFS ๋กœ ๋ชจ๋“  ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•œ ๋’ค, ์†Œ์ˆ˜์ธ ๊ฒƒ๋งŒ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์„œ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

import java.util.*;
// ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ ์žˆ์Œ
// ์†Œ์ˆ˜๋ฅผ ๋ช‡ ๊ฐœ๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ์„๊นŒ?
// ๋ฌธ์ž์—ด numbers ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ,
// ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜์—ฌ๋ผ
// ์šฐ์„  ์ˆซ์ž๋“ค์„ ๋ชจ๋‘ ๋งŒ๋“ค๊ณ , ๊ทธ ์ค‘ ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.
// ์ˆซ์ž์˜ ์กฐํ•ฉ์€ ์—ฌ๋Ÿฌ๊ฐœ์ธ๋ฐ, ์—ฌ๋Ÿฌ ์กฐํ•ฉ ์ค‘ ์†Œ์ˆ˜์ธ ๊ฒƒ์„ ์ฐพ์„ ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐœ์ด๋‹ค.
// ์—ฌ๋Ÿฌ ์ˆซ์ž์˜ ์กฐํ•ฉ ๋ชจ๋‘ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
class Solution {
    boolean[] visited;
    char[] loopThru;
    List<Integer> allNums = new ArrayList<>();
    
    public void generate(char start, String current) {
        if (start != ' ' && !allNums.contains(Integer.parseInt(current)))
            allNums.add(Integer.parseInt(current));
        if (current.length() == loopThru.length) {
            return;
        }
        
        for (int i = 0; i < loopThru.length; i++) {
            if (visited[i]) continue;
            visited[i] = true;
            generate(loopThru[i], current + loopThru[i]);
            visited[i] = false;
        }
    }
    
    public boolean isPrime(int num) {
        if (num == 0 || num == 1) return false;
        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0) return false;
        }
        return true;
    }
    
    public int check(List<Integer> nums) {
        int cnt = 0;
        for (int n : nums) {
            if (isPrime(n)) cnt++;
        }
        return cnt;
    }
    
    public int solution(String numbers) {
        int answer = 0;
        loopThru = numbers.toCharArray();
        visited = new boolean[numbers.length()];
        generate(' ', "");
        System.out.println(allNums);
        answer = check(allNums);
        return answer;
    }
}
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ