
๐ป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
'Algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [4์ฃผ์ฐจ] ํ๋ก๊ทธ๋๋จธ์ค ๋น๋ฐ์ง๋ (0) | 2021.08.15 |
|---|---|
| [3์ฃผ์ฐจ] ํ๋ก๊ทธ๋๋จธ์ค ํ๊ฒ ๋๋ฒ (0) | 2021.08.14 |
| [2์ฃผ์ฐจ] ํ๋ก๊ทธ๋๋จธ์ค ๋ชจ์๊ณ ์ฌ (0) | 2021.08.01 |
| [1์ฃผ์ฐจ] ํ๋ก๊ทธ๋๋จธ์ค ์ฃผ์๊ฐ๊ฒฉ (0) | 2021.07.27 |
| [1์ฃผ์ฐจ] ํ๋ก๊ทธ๋๋จธ์ค ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ (0) | 2021.07.27 |