๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/Programmers

[2์ฃผ์ฐจ] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์†Œ์ˆ˜ ์ฐพ๊ธฐ

์†Œ์ˆ˜ ์ฐพ๊ธฐ ๋ฌธ์ œ ํ’€์ด

 

๐Ÿ’ปQ

ํ•œ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์ ํžŒ ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค.
ํฉ์–ด์ง„ ์ข…์ด ์กฐ๊ฐ์„ ๋ถ™์—ฌ ์†Œ์ˆ˜๋ฅผ ๋ช‡ ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์ข…์ด ์กฐ๊ฐ์— ์ ํžŒ ์ˆซ์ž๊ฐ€ ์ ํžŒ ๋ฌธ์ž์—ด numbers๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ,
์ข…์ด ์กฐ๊ฐ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์†Œ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.
๐Ÿ’‍โ™€๏ธ ์ œํ•œ ์กฐ๊ฑด
• numbers๋Š” ๊ธธ์ด 1 ์ด์ƒ 7 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
• numbers๋Š” 0~9๊นŒ์ง€ ์ˆซ์ž๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
• "013"์€ 0, 1, 3 ์ˆซ์ž๊ฐ€ ์ ํžŒ ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์˜ˆ์ œ

#1
[1, 7]์œผ๋กœ๋Š” ์†Œ์ˆ˜ [7, 17, 71]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


#2
[0, 1, 1]์œผ๋กœ๋Š” ์†Œ์ˆ˜ [11, 101]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

11๊ณผ 011์€ ๊ฐ™์€ ์ˆซ์ž๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’กA

์ด ๋ฌธ์ œ๋Š” ์†Œ์ˆ˜์™€ ์ˆœ์—ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. 
์†Œ์ˆ˜(prime number)๋ž€ 1๋ณด๋‹ค ํฐ ์ž์—ฐ์ˆ˜ ์ค‘ 1๊ณผ ์ž๊ธฐ ์ž์‹ ๋งŒ์„ ์•ฝ์ˆ˜๋กœ ๊ฐ€์ง€๋Š” ์ˆ˜๋‹ค.
1์€ ํ•ฉ์„ฑ์ˆ˜๋„ ์†Œ์ˆ˜๋„ ์•„๋‹ˆ๋‹ค.
์–ด๋–ค ์ˆ˜ n์ด a x b ์ผ๋•Œ, a์™€ b ์ค‘ ํ•˜๋‚˜๋Š” n์˜ ์ œ๊ณฑ๊ทผ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— n์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋งŒ ๋‚˜๋ˆ„์—ˆ์„๋•Œ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ์•ฝ์ˆ˜๊ฐ€ ์—†๋‹ค๋ฉด ์†Œ์ˆ˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

String์œผ๋กœ ๋ฐ›์€ numbers๋ฅผ split() ๋ฉ”์†Œ๋“œ๋กœ ๋‚˜๋ˆ„์–ด์ฃผ๊ณ  ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•ด์ง€๋„๋ก Integer.parseInt() ๋ฉ”์†Œ๋“œ๋กœ intํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ค€ ๋’ค intํ˜• ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.
swap ๋ฐฉ์‹์˜ perm() ๋ฉ”์†Œ๋“œ๋กœ ์ˆœ์—ด์„ ๊ตฌํ•˜๊ณ  StringBuilder๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ๋ฐฐ์—ด๋กœ ์ €์žฅํ•œ๋‹ค.
์ œ๊ณฑ๊ทผ์„ ์ด์šฉํ•ด ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” makePrime() ๋ฉ”์†Œ๋“œ๋กœ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•œ ๋’ค ์ค‘๋ณต๊ฐ’์ด ์—†์–ด์•ผ ํ• ๋•Œ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ธ Set์— ์ €์žฅํ•˜์—ฌ ๊ธธ์ด๋ฅผ ๋ฆฌํ„ดํ•ด ๋‹ต์„ ๊ตฌํ•œ๋‹ค.
import java.util.HashSet;
import java.util.Set;

class Solution {
    public int solution(String numbers) {
        int answer = 0;
        String[] strArr = numbers.split("");
        int[] intArr = new int[strArr.length];

        for(int i = 0; i < intArr.length; i++) {
            intArr[i] = Integer.parseInt(strArr[i]);
        }

        Set<Integer> set = new HashSet<>();

        for(int i = 1; i <= intArr.length; i++) {
            perm(strArr, 0, i, set);
        }
        answer = set.size();
        return answer;
    }

    public void makePrime(Set set, StringBuilder sb) {
        int num = Integer.parseInt(String.valueOf(sb));
        boolean prime = true;

        if(num <= 1) {
            return;
        }

        for(int i = 2; i <= Math.sqrt(num); i++) {
            if(num % i == 0) {
                prime = false;
                break;
            }
        }

        if(prime) {
            set.add(num);
        }
    }

    public void perm(String[] arr, int depth, int k, Set set) {
        if(depth == k) {
            permArr(arr, k, set);
            return;
        }
        else{
            for(int i = depth; i < arr.length; i++) {
                swap(arr, i, depth);
                perm(arr, depth+1, k, set);
                swap(arr, i, depth);
            }
        }
    }
    public void swap(String[] arr, int i, int j) {
        String temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public void permArr(String[] arr, int k, Set set) {
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < k; i++) {
            sb.append(arr[i]);
        }
        makePrime(set, sb);
    }
}โ€‹

 


๐Ÿ‘€ ์ฐธ๊ณ 

์ˆœ์—ด ์•Œ๊ณ ๋ฆฌ์ฆ˜
์†Œ์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜
 

์ˆœ์—ด(Permutation) ์•Œ๊ณ ๋ฆฌ์ฆ˜

1,2,3 ์™€ ๊ฐ™์€ ์ˆซ์ž๋“ค์ด์ด ์žˆ๋‹ค. ์ด๊ฒƒ์„ ์ค‘๋ณตํ•˜์ง€ ์•Š๊ณ  ์ˆœ์„œ๋ฅผ ๋Œ์–ด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ณด์ž 1-2-3 1-3-2 2-1-3 2-3-1 3-1-2 3-2-1 ์—ฌ์„ฏ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค. ์ด์ œ ์ˆซ์ž ๋„ค๊ฐœ์ธ 1,2,3,4๋ฅผ ํ•œ๋ฒˆ ์„ž์–ด๋ณธ๋‹ค. 1-2-3-4

gorakgarak.tistory.com

 

[๋ฐฑ์ค€] 1978๋ฒˆ : ์†Œ์ˆ˜ ์ฐพ๊ธฐ - JAVA [์ž๋ฐ”]

https://www.acmicpc.net/problem/1978 1978๋ฒˆ: ์†Œ์ˆ˜ ์ฐพ๊ธฐ ์ฒซ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 100์ดํ•˜์ด๋‹ค. ๋‹ค์Œ์œผ๋กœ N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ ์ˆ˜๋Š” 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. www.acmicpc.net ๋ฌธ์ œ ๋“œ๋””์–ด ์ƒˆ๋กœ..

st-lab.tistory.com