99ํด๋ฝ ์ฝํ ์คํฐ๋ 23์ผ์ฐจ TIL : ์์ ํ์(ํ๋ก๊ทธ๋๋จธ์ค - ์์ ์ฐพ๊ธฐ)

๐ ๋ฌธ์


https://school.programmers.co.kr/learn/courses/30/lessons/42839
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๐ก ํ์ด
- DFS
- ๊ฐ์ ์ ์ค๋ณตํ์ง ์๊ธฐ ์ํด Set<Integer> ์๋ฃ๊ตฌ์กฐ ์ฌ์ฉ
- searchSosu() : ์์์ฐพ๊ธฐ
- isSosu(int num) : ํด๋น ์(num)๊ฐ ์์์ธ์ง ํ๋ณ(true - ์์/ false- ์์x)
import java.util.*;
class Solution {
public int solution(String numbers) {
int answer = 0;
char[] numArr = numbers.toCharArray();
boolean[] visited = new boolean[numbers.length()];
Set<Integer> ansSet = new HashSet<>();
searchSosu(numArr, visited, ansSet, "");
answer = ansSet.size();
return answer;
}
private void searchSosu(char[] numArr, boolean[] visited, Set<Integer> count, String str) {
if (!str.isEmpty()) {
int num = Integer.parseInt(str);
if (isSosu(num)) {
count.add(num);
}
}
for (int i = 0; i < numArr.length; i++) {
if (!visited[i]) {
visited[i] = true;
searchSosu(numArr, visited, count, str + numArr[i]);
visited[i] = false; // ์์ ๋ณต๊ตฌ
}
}
}
public boolean isSosu(int num) {
if (num < 2) return false;
for (int i = 2; i <= Math.sqrt(num); i++) { // √num ๊น์ง๋ง ํ์ธ
if (num % i == 0) return false;
}
return true;
}
}


๐ ์ค๋์ ํ๊ณ
์์ ํ์์ ์ ์ ์ต์ํด์ง๊ณ ์๋ ๊ฒ ๊ฐ๋ค.
๊ฒฝ์ฐ์ ์๊ฐ ์ ์ผ๋ฉด ์ ์ฒด๋ฅผ ํ์ํด๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ์ง ์์ผ๋, ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ผ๋, ์ด๋ค ๋ฌธ์ ์ ์ด๋ค ๋ฐฉ๋ฒ์ ์ด์ฉํ ์ง๋ ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์ด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
* ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ
โ Brute Force ๊ธฐ๋ฒ - ๋ฐ๋ณต / ์กฐ๊ฑด๋ฌธ์ ํ์ฉํด ๋ชจ๋ ํ
์คํธํ๋ ๋ฐฉ๋ฒ
โก ์์ด(Permutation) - n๊ฐ์ ์์ ์ค r๊ฐ์ ์์๋ฅผ ์ค๋ณต ํ์ฉ ์์ด ๋์ดํ๋ ๋ฐฉ๋ฒ
โข ์ฌ๊ท ํธ์ถ
โฃ ๋นํธ๋ง์คํฌ - 2์ง์ ํํ ๊ธฐ๋ฒ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ
โค BFS, DFS๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ