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

Algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV2] ์†Œ์ˆ˜ ์ฐพ๊ธฐ (์™„์ „ํƒ์ƒ‰, ์†Œ์ˆ˜, ์กฐํ•ฉ)

๋ฐ˜์‘ํ˜•
SMALL

๐Ÿง ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV2. ์†Œ์ˆ˜ ์ฐพ๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

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

์ œํ•œ ์‚ฌํ•ญ

- numbers๋Š” ๊ธธ์ด 1 ์ด์ƒ 7 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
- numbers๋Š” 0~9๊นŒ์ง€ ์ˆซ์ž๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
- "013"์€ 0, 1, 3 ์ˆซ์ž๊ฐ€ ์ ํžŒ ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

numbers return
"17" 3
"011" 2

 

๐Ÿ’ก ๋ฌธ์ œ ํ’€์ด

์ข…์ด์กฐ๊ฐ์„ ์กฐํ•ฉํ•ด์„œ ์ˆซ์ž๋ฅผ ๋งŒ๋“  ํ›„, ์†Œ์ˆ˜์ธ ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ˆœ์—ด๋กœ ์ˆซ์ž๋ฅผ ๋งŒ๋“ค๊ณ , ์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•˜๋‹ค.

 

numbers ๋ฌธ์ž์—ด์„ ๊ฐ€์ง€๊ณ  ์ˆœ์—ด์„ ์ด์šฉํ•ด์„œ ์กฐํ•ฉ ๊ฐ€๋Šฅํ•œ ์ˆซ์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ•œ๋‹ค.

import java.util.*;

class Solution {
    
    static boolean[] visited;
    static List<Long> al = new ArrayList<>();
    
    public int solution(String numbers) {
        for (int i = 1; i <= numbers.length(); i++) { // ์ˆซ์ž ์นด๋“œ i๊ฐœ ์‚ฌ์šฉ
            visited = new boolean[numbers.length()];
            permutation(numbers, "", i);
        }

        return 0;
    }
    
    private void permutation(String numbers, String str, int cnt) {
        if (str.length() == cnt) {
            long num = Long.valueOf(str); // ๋ฌธ์ž์—ด์„ Long ํƒ€์ž… ์ˆซ์ž๋กœ ๋ณ€ํ™˜
            if (!al.contains(num)) al.add(num); // ์ค‘๋ณต๋˜๋Š” ์ˆ˜๊ฐ€ ์—†๋„๋ก ํ•œ๋‹ค.
            return;
        }
        
        for (int i = 0; i < numbers.length(); i++) {
            if (visited[i]) continue;
            visited[i] = true;
            permutation(numbers, str + numbers.charAt(i), cnt);
            visited[i] = false;
        }
    }
}

์ˆœ์—ด์„ ๊ตฌํ•ด์•ผํ•˜๋ฏ€๋กœ visited ๋ฐฐ์—ด์„ ํ™œ์šฉํ•œ๋‹ค. ๋ฐฉ๋ฌธํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ œ์™ธํ•œ numbers์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ str ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€ํ•˜๊ณ , str ๋ฌธ์ž์—ด์ด ์ง€์ •ํ•œ ๊ธธ์ด(cnt)์— ๋„๋‹ฌํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค. ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•ด๋‹น ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ ์ˆœ์—ด๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ผ€์ด์Šค์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ al ๋ฆฌ์ŠคํŠธ์— ๊ฒฐ๊ณผ ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค. ์ž์„ธํ•œ ์ˆœ์—ด ๋ฐฉ์‹์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ–ˆ๋‹ค.

https://sskl660.tistory.com/48?category=879763

 

[Java]์ˆœ์—ด(Permutation)

*์ˆœ์—ด(Permutation) -> ์ˆœ์—ด์ด๋ž€, ์ž„์˜์˜ ์ง‘ํ•ฉ์„ ์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์ฐจ๋ก€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. Ex) ์ด๋ฅผ ํ…Œ๋ฉด ์ง‘ํ•ฉ {1, 2, 3}์ค‘ 3๊ฐœ์˜ ์›์†Œ๋ฅผ ์„ ํƒํ•œ ์ˆœ์—ด์„ ๊ตฌํ•˜์‹œ์˜ค๋ผ๊ณ  ํ•˜๋ฉด, ๊ฒฐ๊ณผ๋Š” {123, 132, 213, 231,

sskl660.tistory.com

 

์ด์ œ al ๋ฆฌ์ŠคํŠธ์— ์‚ฝ์ž…ํ•œ ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๊ณ , ๊ทธ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

private boolean isPrime(long num) {
	if (num == 1 || num == 0) return false;
        
	for (int i = 2; i <= Math.sqrt(num); i++) {
		if (num % i == 0) return false;
	}
        
	return true;
}

์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ๊ฐ’์ด 1์ด๊ฑฐ๋‚˜ 0์ด๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  2๋ถ€ํ„ฐ num ๊ฐ’์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ์ˆœํšŒํ•˜๋ฉด์„œ num๊ณผ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๋‚˜๋ˆ ๋–จ์–ด์ง€๋Š” ๊ฐ’์ด ์žˆ์œผ๋ฉด ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ณ , ๊ทธ๋Ÿฐ ๊ฐ’์ด ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด ์†Œ์ˆ˜์ด๋‹ค. ์ž์„ธํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ–ˆ๋‹ค.

https://st-lab.tistory.com/81

 

JAVA [์ž๋ฐ”] - ์†Œ์ˆ˜ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ ๊ตฌํ˜„

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์†Œ์ˆ˜ [Prime Number] ์†Œ์ˆ˜์˜ ์ •์˜๋Š” 1๋ณด๋‹ค ํฐ ์ž์—ฐ์ˆ˜ ์ค‘ 1 ๊ณผ ๊ทธ ์ˆ˜ ์ž๊ธฐ ์ž์‹ ๋งŒ์„ ์•ฝ์ˆ˜๋กœ ๊ฐ–๋Š” ์ž์—ฐ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค๋Š” ์ ์€ ๋ˆ„๊ตฌ๋‚˜ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์†Œ์ˆ˜์˜ ์•ฝ์ˆ˜๋Š” 2๊ฐœ๋งŒ์„ ๊ฐ–๊ณ ,

st-lab.tistory.com

 

์œ„ ํ’€์ด ๋ฐฉ์‹์„ ์ „์ฒด ์ฝ”๋“œ๋กœ ํ’€์–ด๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

import java.util.*;

class Solution {
    
    static boolean[] visited;
    static List<Long> al = new ArrayList<>();
    
    public int solution(String numbers) {
        for (int i = 1; i <= numbers.length(); i++) {
            visited = new boolean[numbers.length()];
            permutation(numbers, "", i);
        }
        
        int answer = 0;

        for (long num : al) {
            if (isPrime(num)) answer++;
        }
        
        return answer;
    }
    
    private boolean isPrime(long num) {
        if (num == 1 || num == 0) return false;
        
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) return false;
        }
        
        return true;
    }
    
    private void permutation(String numbers, String str, int cnt) {
        if (str.length() == cnt) {
            long num = Long.valueOf(str);
            if (!al.contains(num)) al.add(num);
            return;
        }
        
        for (int i = 0; i < numbers.length(); i++) {
            if (visited[i]) continue;
            visited[i] = true;
            permutation(numbers, str + numbers.charAt(i), cnt);
            visited[i] = false;
        }
    }
}

 

โœจ ํฌ์ŠคํŒ…์„ ๋งˆ์น˜๋ฉฐ

๋น„์Šทํ•œ ์œ ํ˜• ๋ฌธ์ œ์—์„œ๋Š” ์กฐํ•ฉ(combination)์„ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ, ์ˆœ์—ด(permutation) ๋ฐฉ์‹๋„ ๊ธฐ์–ตํ•ด๋‘ฌ์•ผ๊ฒ ๋‹ค.

๋ฐ˜์‘ํ˜•
LIST