https://school.programmers.co.kr/learn/courses/30/lessons/42839
1. ๋ฌธ์
์ฃผ์ด์ง ๋ฌธ์์ด์ ๊ฐ ์๋ฆฌ๋ฅผ ์กฐํฉํ์ฌ ๋ง๋ค ์ ์๋ ์์์ ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค.
2. ํ์ด
๋ถ๋ถ์งํฉ + ์์ด + ์์๊ตฌํ๊ธฐ ๋ก ํ์๋ค.
์ค๋ณต์ฒดํฌ๋ฅผ ํ๊ธฐ ์ํด HashMap 2๊ฐ๋ฅผ ์ฌ์ฉํ์๋ค.
1. ๋ฌธ์์ด์ ๊ฐ ์๋ฆฌ๋ฅผ ๋ถ๋ถ์งํฉ์ผ๋ก ์กฐํฉํ ๋ถ๋ถ ๋ฌธ์์ด์์ (HashMap์ผ๋ก ์ค๋ณต์ฒดํฌ1)
2. ๊ฐ ์๋ฆฌ๋ฅผ ์์ด๋ก ๋ฐฐ์นํ์๊ณ (HashMap์ผ๋ก ์ค๋ณต์ฒดํฌ2)
3. ์ต์ข ์ ์ผ๋ก ๋จ์ ๋ฌธ์์ด์ ์์๊ตฌํ๊ธฐ๋ฅผ ํตํด ๊ฒ์ฆ ํ true/false๋ฅผ ๋ฆฌํดํ์๋ค.
=> true๋ฉด ans๊ฐ์ 1 ๋๋ ค์ค๋ค.
3. ์ฝ๋
import java.io.*;
import java.util.*;
class Solution {
static int ans, length;
static int[] tgt;
static Map<String, String> map, map2;
public int solution(String numbers) {
map = new HashMap<> ();
map2 = new HashMap<> ();
//๋ถ๋ถ์งํฉ
length = numbers.length();
for (int i=1; i< (1<<length); i++) {
StringBuilder sb = new StringBuilder();
for (int j=0; j<length; j++) {
if ((i & (1<<j)) != 0) {
sb.append(numbers.charAt(j));
}
}
//์์ด
if (map.containsKey(sb.toString())) continue;
map.put(sb.toString(), "1");
tgt = new int[sb.toString().length()];
perm(sb.toString(), 0, 0);
}
return ans;
}
static void perm(String num, int tgtIdx, int flag) {
if (tgtIdx == num.length()) {
if (find(num, tgt)) { ans++; }
return;
}
for (int i=0; i<num.length(); i++) {
if ((flag & (1<<i)) != 0) continue;
tgt[tgtIdx] = i;
perm(num, tgtIdx+1, flag|(1<<i));
}
}
static Boolean find(String num, int[] tgt) {
StringBuilder sb = new StringBuilder();
for (int idx:tgt) {
sb.append(num.charAt(idx));
}
if (sb.toString().charAt(0) == '0') return false;
if (map2.containsKey(sb.toString())) return false;
map2.put(sb.toString(), "1");
int newNum = Integer.parseInt(sb.toString());
//์์์ฐพ๊ธฐ
if (newNum == 1) return false;
for (int i=2; i<= Math.sqrt(newNum); i++) {
if (newNum % i == 0) {
return false;
}
}
return true;
}
}
4. ์ฌ๋ด
๋ถ๋ถ์งํฉ, ์์ด์ ๋นํธ๋ง์คํน์ผ๋ก ํธ๋๊น ํจ์ฌ ๊ฐ๊ฒฐํ๊ณ ์ข์ ๊ฒ ๊ฐ๋ค.
์์๊ตฌํ๊ธฐ๋ ์๊ธฐํ๋๊น ์๊ธดํ๊ฒ ์ธ ์ ์์ด์ ์ข์๋ค.
๋๋ฒ๊น ํ๋ฉด์ ๋์ฌ๋ฏ ๋ง๋ฏ ํ๋ค๊ฐ ๋์ค๋ ๊ทธ ์ง๋ฆฟํจ..
์๊ณ ๋ฆฌ์ฆ ์กด์ผ์ธ๋ฏ
'Algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ - Java (0) | 2023.09.20 |
---|---|
[Programmers] ํผ๋ก๋ - Java (0) | 2023.09.20 |
[Programmers] ์์์ฐพ๊ธฐ(Level 1) - Java (0) | 2023.09.16 |
[Programmers] ๋ชจ์๊ณ ์ฌ - Java (0) | 2023.09.16 |
[Programmers] ๋ฑ๊ตฃ๊ธธ - Java (0) | 2023.08.24 |