ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [์™„์ „ ํƒ์ƒ‰/Level2/Java] ์†Œ์ˆ˜ ์ฐพ๊ธฐ
    ๊ณต๋ถ€/์•Œ๊ณ ๋ฆฌ์ฆ˜ 2022. 10. 4. 21:20
    728x90

     ๋ฌธ์ œ ์„ค๋ช… 

    ํ•œ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์ ํžŒ ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค. ํฉ์–ด์ง„ ์ข…์ด ์กฐ๊ฐ์„ ๋ถ™์—ฌ ์†Œ์ˆ˜๋ฅผ ๋ช‡ ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

    ๊ฐ ์ข…์ด ์กฐ๊ฐ์— ์ ํžŒ ์ˆซ์ž๊ฐ€ ์ ํžŒ ๋ฌธ์ž์—ด 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 = "";
            }                      
        }
        
    	
    }

    ๋Œ“๊ธ€

Designed by Tistory.