-
[์์ ํ์/Level2/Java] ์์ ์ฐพ๊ธฐ๊ณต๋ถ/์๊ณ ๋ฆฌ์ฆ 2022. 10. 4. 21:20728x90
๋ฌธ์ ์ค๋ช
ํ์๋ฆฌ ์ซ์๊ฐ ์ ํ ์ข ์ด ์กฐ๊ฐ์ด ํฉ์ด์ ธ์์ต๋๋ค. ํฉ์ด์ง ์ข ์ด ์กฐ๊ฐ์ ๋ถ์ฌ ์์๋ฅผ ๋ช ๊ฐ ๋ง๋ค ์ ์๋์ง ์์๋ด๋ ค ํฉ๋๋ค.
๊ฐ ์ข ์ด ์กฐ๊ฐ์ ์ ํ ์ซ์๊ฐ ์ ํ ๋ฌธ์์ด numbers๊ฐ ์ฃผ์ด์ก์ ๋, ์ข ์ด ์กฐ๊ฐ์ผ๋ก ๋ง๋ค ์ ์๋ ์์๊ฐ ๋ช ๊ฐ์ธ์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- numbers๋ ๊ธธ์ด 1 ์ด์ 7 ์ดํ์ธ ๋ฌธ์์ด์ ๋๋ค.
- numbers๋ 0~9๊น์ง ์ซ์๋ง์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- "013"์ 0, 1, 3 ์ซ์๊ฐ ์ ํ ์ข ์ด ์กฐ๊ฐ์ด ํฉ์ด์ ธ์๋ค๋ ์๋ฏธ์ ๋๋ค.
์ ์ถ๋ ฅ ์
numbers return "17" 3 "011" 2 ์ ์ถ๋ ฅ ์ ์ค๋ช
์์ #1
[1, 7]์ผ๋ก๋ ์์ [7, 17, 71]๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.์์ #2
[0, 1, 1]์ผ๋ก๋ ์์ [11, 101]๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.- 11๊ณผ 011์ ๊ฐ์ ์ซ์๋ก ์ทจ๊ธํฉ๋๋ค.
์ฒ์ ์๊ฐํ ์์ด๋์ด
1. answers์ ๋ฌธ์์ด์ ํ๊ธ์์ฉ ์ชผ๊ฐ์ String [] c_arr ์ ์ ์ฅํ๋ค.
2. String[] c_arr ๋ฅผ ์กฐํฉํ์ฌ ๊ฐ๋ฅํ ๋ชจ๋ ์ซ์ ์กฐํฉ์ ๋ง๋ค์ด ArrayList์ ์ ์ฅํ๋ค.
3. ArrayList์ ์ ์ฅ๋ ๋ฌธ์๋ฅผ ์ซ์๋ก parseIntํ์ฌ ์์์ธ์ง ํ๋จํ๊ณ , ๊ฐ์๋ฅผ ์ผ๋ค.
์๋๋ฐ 2๋ฒ์์ ๋งํ๋ค. ํ๊ธ์์ฉ ๋ถ๋ฆฌํด์ ์ด๋ป๊ฒ ์์ด์ ๋ง๋๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.
์์ด์ ๋ง๋ค๊ธฐ์ํด์ depth๋ค์ ์ธ๋ฑ์ค์ ๋ฐ๊ฟ์ฃผ๋ swap๋ฐฉ์์ ์จ๋ณด์์ง๋ง ์คํจํ๋ค.
๊ฒฐ๊ตญ ๊ฒ์ํด์ ์ด๋ป๊ฒ ํธ๋์ง ์์ด๋์ด๋ง ... ๋ณด๊ธฐ๋ก ํ๋ค.
๋ฐฑํธ๋ํน
DFS๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ฝ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ๊ทธ ์ฆ์ ์ค๋จํ๊ณ ์ด์ ์ผ๋ก ๋์๊ฐ์ฌ ๋ค์ ํ์ธํ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ฉด์ ์ํ๋ ์กฐ๊ฑด์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
๋ง์ ์ฌ์๋ณด์ธ๋ค. ํ์ง๋ง ๊ตฌํ์..๋๋ฌผ์ ์ฐธ๊ณ์ด ๋ฌธ์ ์ ๋ฐฑํธ๋ํน์ ์ ์ฉํด๋ณด๋ฉดnumbers๋ฅผ ๋ช๊ธ์์ฉ ์กฐํฉํ ๊ฑด์ง ๊ฒฐ์ ํ๊ณ (i) , numbers ํ๊ธ์์ฉ์ ๋ถ์ฌ๊ฐ๋ฉด์ (j), ArrayList ์ ์๋ ์ซ์๋ผ๋ฉด ์ง์ด ๋ฃ๋ ๋ฐฉ์์ธ ๊ฒ ๊ฐ๋ค.
๋ช๊ธ์์ฉ ์กฐํฉํ ๊ฑด์ง ๊ฒฐ์ ํ๋ i์ ๋ฒ์๋ 1 ≤ i ≤ numbers.length() ๊ฐ ๋๊ฒ ๋ค.
๋ฌธ์ ์์ numbers์ ์ต๋๊ธธ์ด๊ฐ 7์ด๋ผ ์ฃผ์ด์ก์ผ๋ numbers์ ํ๊ธ์๋น ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ boolean ๋ฐฐ์ด๋ ํ์ํ๋ค.
boolean[] visited = new boolean[7];
i =1 ๋ผ๋ฉด, numbers๋ฅผ ํ ๊ธ์์ฉ ์ชผ๊ฐ์ ๋ฃ๋ ๊ฒ์ ์๋ฏธํ๋ค.
i=2 ๋ผ๋ฉด, numbers ์ค ๋ ๊ธ์์ฉ ์กฐํฉํด์ ๋ฃ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฐฉ๋ฌธํ ์ธ๋ฑ์ค๋ฅผ ์ฒดํฌํ๊ณ , ๋ฐฉ๋ฌธํ์ง ์์ ์ธ๋ฑ์ค๋ง i ๊ธธ์ด๊ฐ ๋ ๋๊น์ง ํ๊ธ์์ฉ ๋ง๋ถ์ฌ ์กฐํฉํด๊ฐ๋ฉฐ ArrayList์ ๋ฃ์ด์ค ํจ์ rec์ด๋ค.
public static void rec(String numbers,String temp,int len);
๋งค๊ฐ๋ณ์ len์ผ๋ก ๋ฐ๋ ๊ฒ์ด i ์ด๋ค.
์๋ฐ์์ String ํ๊ธ์์ฉ ์ ๊ทผํ๋ ค๋ฉด numbers.charAt(index); ์ด๋ฐ์์ผ๋ก ์ ๊ทผํด์ผํ๋ค.
์ต์ข ์์ฑํ ์ฝ๋
import java.util.ArrayList; //์์์ฐพ๊ธฐ public class FindPrimeNumber2 { static ArrayList<Integer> n_list = new ArrayList<>(); static boolean[] visited = new boolean[7]; public int solution(String numbers) { n_list.clear(); int answer = 0; String str=""; //2. ๋ถ๋ฆฌํ ๊ธ์๋ผ๋ฆฌ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์กฐํฉํ ์ซ์ ๋ง๋ค๊ธฐ for(int i=0;i<numbers.length();i++) { rec(numbers,str,i+1); } //3. ์กฐํฉํ ์ซ์ ์ค ์์์ฐพ์ ์นด์ดํธ ์ฆ๊ฐ for(int i : n_list) { int flag=0; if(i==1||i==0) continue; // 1, 0 ์ ์์ ๊ฒ์ฌ ์ํจ for(int j=2;j*j<=i;j++) { if(i%j==0) { //์์์๋ flag=1; break; } } if(flag==0) { answer++; } } return answer; } //2. ๋ถ๋ฆฌํ ๊ธ์๋ผ๋ฆฌ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์กฐํฉํ ์ซ์ ๋ง๋ค๊ธฐ public static void rec(String numbers,String temp,int len){ // 10. ํ์ฌ ๋ง๋ค๊ณ ์๋ ์๋ฆฟ์ == temp๊ธธ์ด๋ฉด ์ข ๋ฃ if(temp.length() == len) { // 11. ArrayList์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ์ธ์ง๋ฅผ ํ์ธํด ์ค๋ณต๊ฐ ์ฝ์ ์ ๋ฐฉ์ง if(!n_list.contains(Integer.parseInt(temp)))n_list.add(Integer.parseInt(temp)); return; } // 3. numbers๋ฅผ ํ์ (ex) numbers= "17" , len = 1 for(int j =0;j<numbers.length();j++){ // 4. ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ธ๋ฑ์ค๋ฉด ํจ์ค if(visited[j]) continue; // 5. ์์ ๋ณ์ temp์ ๋ถ์ฌ๋๊ฐ๋ฉฐ ์ซ์๋ฅผ ์กฐํฉ (ex) j=0 , temp = "1"; j=1, temp="7"; temp += numbers.charAt(j); // 6. temp์ ๋ถ์๊ธฐ ๋๋ฌธ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ visited[j] = true; // 7. ์ฌ๊ท, ์์ ๋ถ์ธ temp๋ณ์์ ํ์ฌ ๋ช ์๋ฆฌ์ ์๋ฅผ ๋ง๋๋์ง์ ๋ํ ์ ๋ณด์ธ len ๋ณ์๋ฅผ ์ ๋ฌ rec(numbers,temp,len); // (ex) rec(numbers,"1",1); // 8. ์กฐํฉ์ด ์๋ฃ๋๋ฉด ์ง์ ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ ์ธ๋ฑ์ค๋ฅผ false๋ก ๋ณ๊ฒฝ visited[j] = false; // 9. temp ๋ณ์์์ ๋ง์ง๋ง ์๋ฆฌ์ ์ซ์๋ฅผ ์ ์ธํ๊ณ ๊ฐฑ์ temp = temp.substring(0,temp.length()-1); //temp = ""; } } }'๊ณต๋ถ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Greedy | ํ์์ ์๊ณ ๋ฆฌ์ฆ] ๋ ์ํผ (0) 2022.11.14 [์์ ํ์/Level1/Java] ์ต์ ์ง์ฌ๊ฐํ (1) 2022.10.06 [์์ ํ์/Level2/Java] ์นดํซ (1) 2022.10.06 [์์ ํ์/Level2/Java] ํผ๋ก๋ (1) 2022.10.06 [์์ ํ์] ๋ชจ์๊ณ ์ฌ (0) 2022.10.03