๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Algorithm/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

2022.05.12 ใ€ŒLV2 ์†Œ์ˆ˜ ์ฐพ๊ธฐใ€

by GroovyArea 2022. 5. 12.
์—ฌ๋Š ๋‚ ์ฒ˜๋Ÿผ ์ฝ”ํ…Œ ๋ฌธ์ œ๋ฅผ ๊ณ„์† ํ’€๊ณ  ์žˆ๋‹ค. 
์ž๋ฃŒ๊ตฌ์กฐ๋„ ๋‚  ์žก์•„์„œ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด์•ผ ๋˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ข€ ๋‚˜์งˆ ์•Š๋Š”๋‹ค. ์‹œ๊ฐ„ ๋ฐฐ๋ถ„ ์ข€ ์ž˜ํ•ด๋ณด์ž.
์–ด์ œ์˜ค๋Š˜ ํ‘ผ ๊ฒƒ์ด ์†Œ์ˆ˜ ์ฐพ๊ธฐ๋ผ๋Š” ์™„์ „ ํƒ์ƒ‰ ๋ฌธ์ œ์ธ๋ฐ, ์ด๊ฑด ์†Œ์ˆ˜๋ผ๋Š” ๊ฒƒ์ด ๊ฒฐ๊ตญ 1๊ณผ ์ž์‹ ๋งŒ์„ ์•ฝ์ˆ˜๋กœ ๊ฐ€์ง€๋Š” ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ์–ด๋–ค ๋ธ”๋กœ๊ทธ์—์„œ ๋ดค๋Š”๋ฐ ๊ฒฐ๊ตญ ๋ฌธ์ œ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๊ฒŒ ๊ด€๊ฑด์ด๋ผ๋Š”๋ฐ ๊ทธ๊ฒƒ์„ ๋ณด๋Š” ์•ˆ๋ชฉ์„ ์ข€ ๊ธธ๋Ÿฌ์•ผ๊ฒ ๋‹ค.

 

์†Œ์ˆ˜ ์ฐพ๊ธฐ

์†Œ์ˆ˜ : 1๊ณผ ์ž๊ธฐ ์ž์‹ ๋งŒ์„ ์•ฝ์ˆ˜๋กœ ๊ฐ€์ง€๋Š” ์ˆ˜

 

String ์ˆซ์ž ๊ฐ’์„ ๋ฐ›์•„ ์†Œ์ˆ˜๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

import java.util.HashSet;
import java.util.Iterator;

class Solution {
    HashSet<Integer> numberSet = new HashSet<>();

    /**
     * ์†Œ์ˆ˜ ํ™•์ธ ๋ฉ”์„œ๋“œ
     * @param num ์†Œ์ˆ˜ ํ™•์ธ ๋งค๊ฐœ๋ณ€์ˆ˜
     * @return boolean ๋…ผ๋ฆฌ ๊ฐ’ ์†Œ์ˆ˜ ์—ฌ๋ถ€
     */
    public boolean isPrimeNumber(int num) {
        if (num == 1 || num == 0) {
            return false;
        }

        int sqrt = (int) Math.sqrt(num);

        /**
         * ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด 
         * ๋ฐฐ์ˆ˜ ์—ฌ๋ถ€ ํŒ๋‹จ
         */
        for (int i = 2; i <= sqrt; i++) {
            if (num % i == 0) {
                return false;
            }
        }

        return true;
    }

    /**
     * ์กฐํ•ฉ ๊ตฌํ•˜๋Š” ๋ฉ”์„œ๋“œ
     * ์žฌ๊ท€ ํ•จ์ˆ˜ ์ด์šฉ
     * @param combination ์กฐํ•ฉ
     * @param otherNumbers ๋‹ค๋ฅธ ์ˆซ์ž
     */
    public void recursive(String combination, String otherNumbers) {

        /**
         * ์กฐํ•ฉ ์ถ”๊ฐ€
         */
        if (!combination.equals("")) {
            numberSet.add(Integer.parseInt(combination));
        }

        /**
         * ์ˆซ์ž๋ฅผ ๋”ํ•ด ์ƒˆ๋กœ์šด ์กฐํ•ฉ ์ถ”๊ฐ€
         */
        for (int i = 0; i < otherNumbers.length(); i++) {
            if (!combination.equals("")) {
                numberSet.add(Integer.valueOf(combination));
            }
            recursive(combination + otherNumbers.charAt(i), otherNumbers.substring(0, i) + otherNumbers.substring(i + 1));
        }
    }

    public int solution(String numbers) {
        int primeCount = 0;

        /**
         * ์ž…๋ ฅ ๋ฐ›์€ ๋ชจ๋“  ์กฐํ•ฉ ๋งŒ๋“ค๊ธฐ
        */
        recursive("", numbers);

        Iterator<Integer> iterator = numberSet.iterator();

        while (iterator.hasNext()) {
            int number = iterator.next();

            if (isPrimeNumber(number)) {
                primeCount++;
            }
        }

        return primeCount;
    }
}

 

1. ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•ด ๊ทธ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด ์นด์šดํŠธ๋ฅผ ์–ป์–ด ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์†Œ์ˆ˜ ํŒ๋ณ„

์ฐธ์กฐ : https://firework-ham.tistory.com/8

 

[JAVA] ์†Œ์ˆ˜ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

์†Œ์ˆ˜ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์œ ๋ช…ํ•œ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด์ž…๋‹ˆ๋‹ค. ๊ณ ๋Œ€ ๊ทธ๋ฆฌ์Šค์˜ ์ˆ˜ํ•™์ž ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค๊ฐ€ ๋งŒ๋“ค์–ด ๋‚ธ ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•  ๋•Œ๋„ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ

firework-ham.tistory.com

 

2. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฉ”์„œ๋“œ

๋ชจ๋“  ์กฐํ•ฉ์„ Set์— ๋„ฃ์—ˆ๋‹ค. Set์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

3. ์กฐํ•ฉ์„ ์–ป์–ด Iterator์„ ์‚ฌ์šฉํ•œ ํ›„ ๋ฐ˜๋ณต์„ ๋Œ๋ ค ์†Œ์ˆ˜ ํŒ๋ณ„์„ ํ•œ ๋’ค ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

 

๊ฒฐ๋ก  

์™„์ „ ํƒ์ƒ‰์€ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘์—์„œ ์‰ฌ์šด ํŽธ์— ์†ํ•˜์ง€๋งŒ ๋ชจ๋“  ์กฐํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์‚ด์ง ์• ๋ฅผ ๋จน๊ธด ํ–ˆ๋‹ค. 

์†Œ์ˆ˜ ํŒ๋ณ„ํ•ด์ฃผ๋Š” ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ๋ฐฐ์›Œ๊ฐ€๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์ปฌ๋ ‰์…˜ ์ค‘์—์„œ Map๊ณผ List๋งŒ ์ผ๋Š”๋ฐ Set๋„ ์ž์ฃผ ์• ์šฉํ•ด์•ผ๊ฒ ๋‹ค. 

๋ฐ˜์‘ํ˜•