๋ฌธ์ œ

 

๋ถ„์„

์‚ฌ์‹ค ์ด ๋ฌธ์ œ๋ฅผ ๊ต‰์žฅํžˆ ๋‹จ์ˆœ ๋ฌด์‹ํ•˜๊ฒŒ ํ’€์—ˆ๋‹ค.

 

๋Œ€๋žต ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ์š”์•ฝํ•˜๋ฉด

 

1.  ์ค‘๊ฐ„์— ํŒŒํ‹ฐ์…˜(X)์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๊ฑฐ๋ฆฌ ๋‘๊ธฐ๋ฅผ ์ง€ํ‚จ ๊ฒƒ์ด๋‹ค.

 

2. ํŒŒํ‹ฐ์…˜์„ ์‚ฌ์ด์— ๋‘๊ณ  ์•‰์€ ๊ฒฝ์šฐ๋„ ๊ฑฐ๋ฆฌ ๋‘๊ธฐ๋ฅผ ์ง€ํ‚จ๊ฒƒ์ด๋‹ค. (์˜†์— ๋นˆ ํ…Œ์ด๋ธ”์ด ์žˆ์œผ๋ฉด ์•ˆ๋จ)

 

์œผ๋กœ ์š”์•ฝ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ƒ๊ฐํ•ด๋ณด๋ฉด, 

 

1๋ฒˆ ์กฐ๊ฑด์€ ํŒŒํ‹ฐ์…˜์ด ๋‚˜์˜ค๋ฉด ํ•ด๋‹น ๋ผ์ธ์€ ๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

 

2๋ฒˆ ์กฐ๊ฑด์—์„œ๋Š” P(์ฐธ๊ฐ€์ž) ์˜†์— ๊ณต์„(O)์ด ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค. 

 

๋ผ๊ณ  ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งœ๋ณด์ž 

 

ํƒ์ƒ‰์„ ํ•  ๋•Œ๋Š” ์„ธ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

 

1. ํŒŒํ‹ฐ์…˜(X)์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ 

     - ๋” ์ด์ƒ ๋ณผ ํ•„์š” ์—†์Œ skip

 

2. ์ฐธ๊ฐ€์ž(P)๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ

    - ๋ฌด์กฐ๊ฑด ์•ˆ๋จ

 

3. ๊ณต์„(O)์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ

    - ์ด๊ฑด ์ข€ ๋” ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

      ์ฃผ๋ณ€์— ์ฐธ๊ฐ€์ž(P) ๊ฐ€ ์žˆ๋Š” ์ง€ ํ™•์ธํ•ด ๋ณด์ž

 

์ด๋Ÿฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ํ’€๋ฉด ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทผ๋ฐ ๋‚œ ์ƒํ•˜์ขŒ์šฐ ๋Œ€๊ฐ์„  ๊นŒ์ง€ ์ผ์ผ์ด ํƒ์ƒ‰ํ•ด์ฃผ์—ˆ๋‹ค ใ…Žใ…Ž...

 

์ฝ”๋“œ

import java.util.*;

class Solution {
    
    static int[] dx = {1,2,-1,-2,0,0,0,0,-1,-1,1,1};
    static int[] dy = {0,0,0,0,1,2,-1,-2,-1,1,-1,1};
    static List<Integer> answer_ = new ArrayList<>();
    public int[] solution(String[][] places) {
        int[] answer = new int[5];
        for(int i=0;i<5;i++){
            visit(places[i]);
            if(visit(places[i]) == true){
                answer_.add(1);
            }
            else {
                answer_.add(0);
            }
        }
        
        for(int i=0;i<5;i++){
            answer[i] = answer_.get(i);
        }
        
        return answer;
    }
    
    static boolean visit(String[] places){
        for(int j=0;j<5;j++){
                for(int k=0;k<5;k++){
                    if(places[j].charAt(k) == 'P'){
                        check(j,k,places);
                        if(check(j,k,places) == false){
                            return false;
                        }
                    }    
                }
            }    
        return true;
    }
    
    static boolean check(int y,int x,String[] places){
        for(int i=0;i<=7;i++){
            if(y+dy[i] < 0 || y+dy[i] > 4 || x+dx[i] < 0 || x+dx[i] > 4) break; 
            if(places[y+dy[i]].charAt(x+dx[i]) == 'X') break;
            if(places[y+dy[i]].charAt(x+dx[i]) == 'P') return false;
        }
        
        for(int i=2;i<=3;i++){
            if(y+dy[i] < 0 || y+dy[i] > 4 || x+dx[i] < 0 || x+dx[i] > 4) break;
            if(places[y+dy[i]].charAt(x+dx[i]) == 'X') break;
            if(places[y+dy[i]].charAt(x+dx[i]) == 'P') return false;
        }
        for(int i=4;i<=5;i++){
            if(y+dy[i] < 0 || y+dy[i] > 4 || x+dx[i] < 0 || x+dx[i] > 4) break;
            if(places[y+dy[i]].charAt(x+dx[i]) == 'X') break;
            if(places[y+dy[i]].charAt(x+dx[i]) == 'P') return false;
        }
        for(int i=6;i<=7;i++){
            if(y+dy[i] < 0 || y+dy[i] > 4 || x+dx[i] < 0 || x+dx[i] > 4) break;
            if(places[y+dy[i]].charAt(x+dx[i]) == 'X') break;
            if(places[y+dy[i]].charAt(x+dx[i]) == 'P') return false;
        }
        for(int i=8;i<=11;i++){
            if(y+dy[i] < 0 || y+dy[i] > 4 || x+dx[i] < 0 || x+dx[i] > 4) continue;
            if(places[y+dy[i]].charAt(x+dx[i]) == 'X' || places[y+dy[i]].charAt(x+dx[i]) == 'O') 
                continue;
            if(places[y+dy[i]].charAt(x+dx[i]) == 'P'){
                
                
              if(places[y+dy[i]].charAt(x) == 'X' && places[y].charAt(x+dx[i]) == 'X') {
                  continue;
                }
                else return false;
                }
            
            }  
        return true;
        }
        
    
    }

ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 

 

- ๋ฆฌ์ŠคํŠธ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ ๋‘ ๊ฐœ์˜ ์ (์‹œ์ž‘์  , ๋์ )์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

- ์‹œ์ž‘์ ๊ณผ ๋์ ์œผ๋กœ ์ ‘๊ทผํ•  ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•ด๋‹น ์ˆ˜์—ด์—์„œ ํ•ฉ์ด 5์ธ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž

 

 

1 2 3 2 5

 

์™„์ „ ํƒ์ƒ‰์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ด๋•Œ ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1. ์ฒ˜์Œ์—๋Š” ์‹œ์ž‘์ ๊ณผ ๋์  ๋ชจ๋‘ 0์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.

 

1(start,end) 2 3 2 5

 

2. ํ•ฉ์ด ๋ชฉํ‘œ๊ฐ’๊ณผ ๊ฐ™์œผ๋ฉด ์นด์šดํŠธํ•œ๋‹ค.

 

3. ๋งŒ์•ฝ ๋ชฉํ‘œ๊ฐ’๋ณด๋‹ค ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ์ด ์ž‘๋‹ค๋ฉด end ์ธ๋ฑ์Šค๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

 

1(start) 2(end) 3 4 5

 

3-1. ํ˜„์žฌ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ฐ’์€ 3์ด๋ฏ€๋กœ end ์ธ๋ฑ์Šค๋ฅผ 1๋งŒํผ ๋” ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 

         ๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ฐ’์€ 6์ด ๋œ๋‹ค.

 

4. ๋งŒ์•ฝ ๋ชฉํ‘œ๊ฐ’๋ณด๋‹ค ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ์ด ํฌ๋‹ค๋ฉด start ์ธ๋ฑ์Šค๋ฅผ 1๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

 

1 2(start) 3(end) 4 5

  

5. ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํ™•์ธ ํ• ๋•Œ๊นŒ์ง€ 2~4 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ํ•ฉ์ด 5๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๋ชจ๋‘ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค !

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ

 

 

 

ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ์ด๋‹ค

 

๋ถ„์„

ํ•ฉ์ด k ๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค์™€ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ธ๋ฑ์Šค์˜ ๊ธธ์ด๋ฅผ ๋น„๊ตํ•ด์„œ ๊ฐ€์žฅ ์ตœ์†Œ ์ผ ๋•Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์ฝ”๋“œ

class Solution {
    
    public int[] solution(int[] sequence, int k) {
        int min = Integer.MAX_VALUE;
        int end = 0;
        int num = sequence.length;
        int sum = 0;
        int[] answer = new int[2];
        
        for(int start=0;start<num;start++){
            while(sum < k && end < num){
                sum += sequence[end];
                end ++;
            }
            
            if(sum == k && min > (end-1) - start) {
                min = (end-1) - start;
                answer[0] = start;
                answer[1] = end-1;
            }
            
            sum -= sequence[start];
        }
        
        return answer;
    }
}

 

 

"์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ" ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

https://www.youtube.com/watch?v=ttLRltNDiCo

 

"์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ" ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

(https://www.youtube.com/watch?v=KGyK-pNvWos&t=2349s)

 

 

์ •๋ ฌ์ด๋ž€?

- ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

- ๋ฌธ์ œ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

์œ„์™€ ๊ฐ™์ด ์ •๋ ฌ๋˜์ง€ ์•Š์€ ์ˆ˜์—ด์„ ์ •๋ ฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ๋ ๊นŒ ?

 

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ํฌ๊ฒŒ 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

1. ์„ ํƒ ์ •๋ ฌ 

     - ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

7 5 9 0 3 1 6 2 4 8

์ฒซ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ๋Š” 0์ด ์ œ์ผ ์ž‘์œผ๋ฏ€๋กœ 0๊ณผ 7์„ ๊ตํ™˜ํ•œ๋‹ค.

 

0 5 9 7 3 1 6 2 4 8

๋‘๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ๋Š” 1์ด ์ œ์ผ  ์ž‘์œผ๋ฏ€๋กœ 5์™€ ๊ตํ™˜ํ•œ๋‹ค.

 

0 1 9 7 3 5 6 2 4 8

์ด๋ ‡๊ฒŒ ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•ด๋‚˜๊ฐ€๋‹ค ๋ณด๋ฉด ๊ฒฐ๊ตญ 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ •๋ ฌ์ด ๋œ๋‹ค.

 

์‹œ๊ฐ„๋ณต์žก๋„ : O(N^2)

 

์†Œ์Šค์ฝ”๋“œ

import java.util.*;

public class Solution {
    public static void main(String[] args) {
        int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};
            for(int i=0;i<arr.length;i++){
                int min_idx = i;
                for(int j=i+1;j<arr.length;j++){
                    if(arr[min_idx] > arr[j]){
                        min_idx = j;
                    }
                }
                int temp = arr[i];
                arr[i] = arr[min_idx];
                arr[min_idx] = temp;
            }
        for (int num : arr) {
            System.out.print(num+" ");
        }
        }

}

 

2. ์‚ฝ์ž… ์ •๋ ฌ

     - ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ณจ๋ผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•œ๋‹ค.

     - ์„ ํƒ ์ •๋ ฌ๋ณด๋‹ค ๋” ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

7 5 9 0 3 1 6 2 4 8

์ฒซ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ๋Š” 5์˜ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. 7์˜ ์˜ค๋ฅธ์ชฝ or ์™ผ์ชฝ์œผ๋กœ ๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ 7๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— 7์˜ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.

 

5 7 9 0 3 1 6 2 4 8

๋‘๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ๋Š” 9์˜ ์œ„์น˜๋ฅผ ์ •ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์•ž์— ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ณด๋‹ค 9๊ฐ€ ๋” ํฌ๋ฏ€๋กœ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
(์ •ํ™•ํžˆ๋Š” ๋ฐ”๋กœ ์•ž์— 7๋ณด๋‹ค ์ปค์„œ ๋ฐ”๋กœ ์ •๋ ฌ์„ ๋ฉˆ์ถ˜๋‹ค,)

 

์ด๋Ÿฐ์‹์œผ๋กœ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•˜๋ฉด 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ •๋ ฌ์ด ๋œ๋‹ค.

 

์‹œ๊ฐ„ ๋ณต์žก๋„: O(N^2)

 

์†Œ์Šค์ฝ”๋“œ

import java.util.*;

public class Solution {
    public static void main(String[] args) {
        int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};
            for(int i=1;i<arr.length;i++){
                for(int j=i;j>0;j--){
                    if(arr[j-1] > arr[j]){
                        int temp = arr[j];
                        arr[j] = arr[j-1];
                        arr[j-1] = temp;
                    }
                    else break;
                }

            }
        for (int num : arr) {
            System.out.print(num+" ");
        }
        }

}

 

3. ํ€ต ์ •๋ ฌ

     - ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ทธ ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝ

     - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ทผ๊ฐ„

     - ๋ณดํ†ต ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€(pivot)์œผ๋กœ ํ•œ๋‹ค.

 

5 7 9 0 3 1 6 2 4 8

์ฒซ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ๋Š” 5๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค. 

๊ทธ๋ ‡๋‹ค๋ฉด ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ 7์€ 5๋ณด๋‹ค ํฌ๊ธฐ์— ์„ ํƒ๋˜๊ณ  , ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ์˜ 4๋Š” 5๋ณด๋‹ค ์ž‘๊ธฐ์— ์„ ํƒ๋œ๋‹ค.

์ด์ œ ๋‘˜์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พผ๋‹ค.

5 4 9 0 3 1 6 2 7 8

์ด์ œ ์ชฝ์—์„œ๋ถ€ํ„ฐ 9๋Š” 5๋ณด๋‹ค ํฌ๊ธฐ์— ์„ ํƒ๋˜๊ณ  , ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ์˜ 2๋Š” 5๋ณด๋‹ค ์ž‘๊ธฐ์— ์„ ํƒ๋œ๋‹ค.

๋‹ค์‹œ ๋‘˜์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พผ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๊ฐ€ ์—‡๊ฐˆ๋ฆฌ๋Š” ์ˆœ๊ฐ„์ด ์˜ฌ๊ฒƒ์ด๋‹ค.

๊ทธ๋•Œ ์ž‘์€ ๋ฐ์ดํ„ฐ์™€ ํ”ผ๋ฒ—๊ฐ’์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค

 

1 4 2 0 3 5 6 9 7 8

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์™ผ์ชฝ ๋ฐ์ดํ„ฐ๋Š” 5๋ณด๋‹ค ์ž‘๊ณ  , ์˜ค๋ฅธ์ชฝ ๋ฐ์ดํ„ฐ๋Š” 5๋ณด๋‹ค ํฌ๋‹ค.

์ด์ฒ˜๋Ÿผ ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์„ ๋ถ„ํ• ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์•ž์—์„œ ์ง„ํ–‰ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ถ„ํ• ๋œ ๋ฐ์ดํ„ฐ์—์„œ ๋‹ค์‹œ ํ€ต์ •๋ ฌ์„ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

์‹œ๊ฐ„๋ณต์žก๋„ : ์ผ๋ฐ˜์ ์œผ๋กœ O(NlogN) , ์ตœ์•…์˜ ๊ฒฝ์šฐ O(N^2)

 

์†Œ์Šค์ฝ”๋“œ

import java.util.*;

public class Solution {
    public static void main(String[] args) {
        int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};
        quickSort(arr,0,arr.length-1);
        for (int num : arr) {
            System.out.print(num+" ");
        }
        }

        public static void quickSort(int[] arr,int start,int end){
            if(start >= end) return;

            int pivot = start;
            int left = start+1;
            int right = end;

            while (left <= right){
                while (left <= end && arr[left] <= arr[pivot]) left++;
                while(right > start && arr[right] >= arr[pivot]) right--;

                if(left > right){
                    int temp = arr[pivot];
                    arr[pivot] = arr[right];
                    arr[right] = temp;
                }
                else{
                    int temp = arr[left];
                    arr[left] = arr[right];
                    arr[right] = temp;
                }
            }
            quickSort(arr,start,right-1);
            quickSort(arr,right+1,end);
        }

}

 

4. ๊ณ„์ˆ˜ ์ •๋ ฌ

    - ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ๋ถ€ํ•ฉํ•  ๋•Œ๋งŒ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

    - ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜์–ด ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

0 0 0 0 0 0 0 0 0 0

๋จผ์ € ํฌ๊ธฐ๊ฐ€ 0 ์ธ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

7 7 1 1 2 2 3 3 4 5

๋งŒ์•ฝ ์ด๋Ÿฐ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ค๋Š” ์ˆซ์ž๋ฅผ ์นด์šดํŒ…ํ•˜๊ณ  ๋ฐฐ์—ด์— ์ง‘์–ด ๋„ฃ๋Š” ๋‹ค๋ฉด ํšจ๊ณผ์ ์ผ ๊ฒƒ์ด๋‹ค.

 

๋จผ์ € ๋งŒ๋“  0 ๋ฐฐ์—ด์— ์ ์šฉ์‹œ์ผœ๋ณด์ž

0 2 2 2 1 1 0 2 0 0

์ˆซ์ž๋“ค์ด ๋“ฑ์žฅํ•œ ํšŸ์ˆ˜๋งŒํผ ๋ฐฐ์—ด์— ํ”Œ๋Ÿฌ์Šค๋ฅผ ํ•ด์ฃผ์–ด ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

 

์ด์ œ ์ด๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(N+K)๋ฅผ ๋ณด์žฅํ•˜์ง€๋งŒ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„  ์ตœ์•…์˜ ํšจ์œจ์„ ๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค.

ex) 0๊ณผ 9๋ฐ–์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‘ ๊ฐœ๋ฐ–์— ์—†๋Š” ๋ฐ ํฌ๊ธฐ๊ฐ€ 10์ธ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ์ •๋ ฌํ•ด์•ผํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ, ๋™์ผํ•œ ๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ ํšจ๊ณผ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์†Œ์Šค์ฝ”๋“œ

import java.util.*;

public class Solution {
    public static void main(String[] args) {
        int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};

        int[] sort = new int[arr.length+1];

        for(int i=0;i<arr.length;i++){
            sort[arr[i]] ++;
        }

        for(int i=0;i<sort.length;i++){
            for(int j=0;j<sort[i];j++){
                System.out.print(i+" ");
            }
        }
        }

}

 

๋ถ„์„


ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น , ๋น„ํŠธ๋งˆ์Šคํ‚น ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1. ๋น„ํŠธ๋งˆ์Šคํ‚น

 

๋น„ํŠธ ๋งˆ์Šคํ‚น์ด๋ž€?

๋ถˆ๋ฆฌ์–ธ ๋ฐฐ์—ด์˜ ์—ญํ• ์„ ํ•˜๋Š” ํ•˜๋‚˜์˜ ์ˆซ์ž๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ํƒ์ƒ‰ , ์ˆ˜์ • ๋“ฑ์˜ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค

- ํฐ๋Œ์˜ ํ„ฐ์ „ ์œ ํŠœ๋ธŒ

 

๋” ์ž์„ธํ•œ ์‚ฌํ•ญ์€ ์ด์ „์— ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•ด ๋†“์€ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” 

https://cb036133.tistory.com/91

 

[๋ฐฑ์ค€] 11723 ์ง‘ํ•ฉ JAVA

๋ถ„์„ ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์ด์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋น„ํŠธ๋งˆ์Šคํ‚น์ด๋ž€? - ์ปดํ“จํ„ฐ๋Š” ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์“ฐ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ํ†ตํ•ด ์Šค์œ„์น˜,๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ๋“ฑ

cb036133.tistory.com

 

static void dfs() {
    for (int i = 0; i < (1 << num) ; i++) {
        int cnt = 0;
        team = new boolean[num];
        for (int j = 0; j < num; j++) {
            if ((i & (1 << j)) != 0) {
                team[j] = true;
                cnt++;
            }
        }
        if (cnt == num / 2) cal();


    }
}

์ €๋Š” ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์ด์šฉํ•ด์„œ ํŒ€์˜ ์ˆ˜๊ฐ€ ๋ฐ˜๋ฐ˜์ด ๋˜๋ฉด ๊ฐ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜ ํ•ฉ์„ ๋นผ์ฃผ๋Š” ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

2. ๋ฐฑํŠธ๋ž˜ํ‚น

๋ฐฑํŠธ๋ž˜ํ‚น์ด๋ž€?

ํ•ด๋ฅผ ์ฐพ๋Š” ๋„์ค‘ ํ•ด๊ฐ€ ์•„๋‹ˆ์–ด์„œ ๋ง‰ํžˆ๋ฉด, ๋˜๋Œ์•„๊ฐ€์„œ ๋‹ค์‹œ ํ•ด๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ธฐ๋ฒ•

 

dfs๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฑํŠธ๋ ˆํ‚น์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

static void dfs(int idx,int depth) {
        if (depth == num / 2) {
            cal();
            return;
        } else {
            for (int i = idx; i < num; i++) {
                if (check[i] == false) {
                    check[i] = true;
                    dfs(i+1,depth + 1);
                    check[i] = false;
                }
            }
        }
    }

 

์ฝ”๋“œ - ๋น„ํŠธ๋งˆ์Šคํ‚น


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class Main {
    static int num;
    static int[][] arr;
    static boolean[] team;
    static int min = Integer.MAX_VALUE;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        num = Integer.parseInt(br.readLine());
        arr = new int[num][num];
        team = new boolean[num];

        for (int i = 0; i < num; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            for (int j = 0; j < num; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        dfs();

        System.out.println(min);
    }

    static void dfs() {
        for (int i = 0; i < (1 << num) ; i++) {
            int cnt = 0;
            team = new boolean[num];
            for (int j = 0; j < num; j++) {
                if ((i & (1 << j)) != 0) {
                    team[j] = true;
                    cnt++;
                }
            }
            if (cnt == num / 2) cal();


        }
    }

    static void cal() {
        int num1 = 0;
        int num2 = 0;

        for(int i=0;i<num-1;i++){
            for(int j=i+1;j<num;j++){
                if(team[i] == true & team[j] == true){
                    num1 += arr[i][j];
                    num1 += arr[j][i];
                }
                if(team[i] == false & team[j] == false){
                    num2 += arr[i][j];
                    num2 += arr[j][i];
                }
            }

        }


        int result = Math.abs(num1-num2);

        if(result == 0){
            System.out.println(0);
            System.exit(0);
        }

        if(min > result) min = result;
    }

}

 

์ฝ”๋“œ - ๋ฐฑํŠธ๋ž˜ํ‚น

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;

import static java.lang.Math.abs;

public class Main {
    static int[][] arr;
    static boolean[] check;
    static int num;
    static int result=Integer.MAX_VALUE;

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        num = sc.nextInt();
        check = new boolean[num];
        arr = new int[num][num];
        for (int i = 0; i < num; i++) {
            for (int j = 0; j < num; j++) {
                arr[i][j] = sc.nextInt();
            }
        }

        dfs(0,0);
        System.out.println(result);
    }

    static void dfs(int idx,int depth) {
        if (depth == num / 2) {
            cal();
            return;
        } else {
            for (int i = idx; i < num; i++) {
                if (check[i] == false) {
                    check[i] = true;
                    dfs(i+1,depth + 1);
                    check[i] = false;
                }
            }
        }
    }

    static void cal() {
        int num1 = 0;
        int num2 = 0;

        for (int i = 0; i < num-1; i++) {
            for(int j= i+1;j<num;j++) {
                if (check[i] == true & check[j] == true) {
                    num1 += arr[i][j];
                    num1 += arr[j][i];
                }
                else if (check[i] == false & check[j] == false) {
                    num2 += arr[i][j];
                    num2 += arr[j][i];
                }
            }
        }
        int val = abs(num1 - num2);
        if(val == 0){
            System.out.println(0);
            System.exit(0);
        }

        result = Math.min(result,val);
    }
}

 

๋ถ„์„


์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๋ฉด ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ํŠธ๋ฆฌ์˜ ์ˆœํ™˜์— ๋Œ€ํ•ด ์•Œ์•„์•ผํ•œ๋‹ค.

 

ํŠธ๋ฆฌ๋ž€?

๊ฐ€๊ณ„๋„์™€ ๊ฐ™์€ ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

 

๋ฃจํŠธ๋…ธ๋“œ :  ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ์ตœ์ƒ์œ„ ๋…ธ๋“œ (F)๋‹จ๋ง๋…ธ๋“œ : ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ (A,C,E,H)ํฌ๊ธฐ : ํŠธ๋ฆฌ์— ํฌํ•จ ๋œ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ (8)๊นŠ์ด : ๊นŠ์ด ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ๋†’์ด :  ๊นŠ์ด ์ค‘ ์ตœ๋Œ“๊ฐ’ (3)์ฐจ์ˆ˜ : ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ„์„  ๊ฐœ์ˆ˜

 

* ํŠธ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ N ์ผ๋•Œ, ์ „์ฒด ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋Š” N-1 ์ด๋‹ค.

 

ํŠธ๋ฆฌ์˜ ์ˆœํšŒ 

ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์— ํฌํ•จ ๋œ ๋…ธ๋“œ๋ฅผ ํŠน์ •ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•œ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๋Œ€ํ‘œ์ ์ธ ์ˆœํšŒ์˜ ๋ฐฉ๋ฒ•์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

1. ์ „์œ„ ์ˆœํšŒ : ๋ฃจํŠธ๋…ธ๋“œ -> ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•œ๋‹ค.

                       F B A D C E G I H

2. ์ค‘์œ„ ์ˆœํšŒ :  ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ -> ๋ฃจํŠธ ๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ

                       A B C D E F G H I

3. ํ›„์œ„ ์ˆœํšŒ :  ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ -> ๋ฃจํŠธ ๋…ธ๋“œ

                       A C E D B H I G F

 

์œ„์˜ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•ด์„œ ์ž…๋ ฅ์œผ๋กœ ๋…ธ๋“œ๊ฐ„ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๋ฐ›์€ ๋’ค์— ์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

์ฝ”๋“œ


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class Main {
    //์ตœ์ƒ์œ„ ๋ฃจํŠธ ๋…ธ๋“œ ์ƒ์„ฑ
    static Node root = new Node('A',null,null);
    //ํŠธ๋ฆฌ์— ๋“ค์–ด๊ฐˆ ๋…ธ๋“œ ํด๋ž˜์Šค
    static class Node{
        char name;
        Node left;
        Node right;

        public Node(char name, Node left, Node right) {
            this.name = name;
            this.left = left;
            this.right = right;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int num = Integer.parseInt(br.readLine());

        for(int i=0;i<num;i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            InsertNode(root,st.nextToken().charAt(0),st.nextToken().charAt(0),st.nextToken().charAt(0));
        }

        preOrder(root);
        System.out.println();
        inOrder(root);
        System.out.println();
        postOrder(root);
    }

    private static void InsertNode(Node root, char value, char left, char right) {
        //ํ˜„์žฌ ๋…ธ๋“œ์™€ value ์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด
        if(root.name == value){
            root.left = (left == '.' ? null : new Node(left,null,null));
            root.right = (right == '.' ? null : new Node(right,null,null));
        }

        else{
            //์™ผ์ชฝ ์ž์‹๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๋…ธ๋“œ ํƒ์ƒ‰ ํ›„ ์ž์‹ ๋…ธ๋“œ ์ถ”๊ฐ€
            if(root.left != null) InsertNode(root.left,value,left,right);
            //์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๋…ธ๋“œ ํƒ์ƒ‰ ํ›„ ์ž์‹ ๋…ธ๋“œ ์ถ”๊ฐ€
            if(root.right != null) InsertNode(root.right,value,left,right);
        }
    }
    //์ „์œ„ ์ˆœํšŒ
    static void preOrder(Node node){
        if(node == null) return;
        System.out.print(node.name+" ");
        preOrder(node.left);
        preOrder(node.right);
    }
    //์ค‘์œ„ ์ˆœํšŒ
    static void inOrder(Node node){
        if(node == null) return;
        inOrder(node.left);
        System.out.print(node.name+" ");
        inOrder(node.right);
    }
    //ํ›„์œ„ ์ˆœํšŒ
    static void postOrder(Node node){
        if(node == null) return;
        postOrder(node.left);
        postOrder(node.right);
        System.out.print(node.name+" ");
    }


}

 

์ฐธ๊ณ  ์‚ฌ์ดํŠธ

https://www.youtube.com/watch?v=i5yHkP1jQmo&t=470s 

https://velog.io/@gandi0330/Java-%EB%B0%B1%EC%A4%80-%ED%8A%B8%EB%A6%AC-%EC%88%9C%ED%9A%8C-1991%EB%B2%88

 

[Java] ๋ฐฑ์ค€ / ํŠธ๋ฆฌ ์ˆœํšŒ / 1991๋ฒˆ

๋ฌธ์ œํŠธ๋ฆฌ ์ˆœํšŒ ๋ฌธ์ œ ๋งํฌ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ „์œ„ ์ˆœํšŒ(preorder traversal), ์ค‘์œ„ ์ˆœํšŒ(inorder traversal), ํ›„์œ„ ์ˆœํšŒ(postorder traversal)ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.https://www.acmicp

velog.io

 

 

๋ถ„์„


๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์ด์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋น„ํŠธ๋งˆ์Šคํ‚น์ด๋ž€?

- ์ปดํ“จํ„ฐ๋Š” ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์“ฐ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

  ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ํ†ตํ•ด ์Šค์œ„์น˜,๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  

 

๋น„ํŠธ์—ฐ์‚ฐ์ž์˜ ์ข…๋ฅ˜

- ๋น„ํŠธ๋งˆ์Šคํฌ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1.  a | b

    - a์˜ ๋ชจ๋“  ๋น„ํŠธ์™€ b์˜ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ OR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    ex) a=1 , b=1 ์ผ๋•Œ a | b = 1

          a=1 , b=0 ์ผ๋•Œ a | b = 1

          a=0 , b=0 ์ผ๋•Œ a | b = 0

 

2.  a & b

    - a์˜ ๋ชจ๋“  ๋น„ํŠธ์™€ b์˜ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ AND ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    ex) a=1 , b=1 ์ผ๋•Œ a & b = 1

          a=1 , b=0 ์ผ๋•Œ a & b = 0

          a=0 , b=0 ์ผ๋•Œ a & b = 0

 

3.  a ^ b

     - a์˜ ๋ชจ๋“  ๋น„ํŠธ์™€ b์˜ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ XOR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. (๋‹ค๋ฅด๋ฉด 1 , ๊ฐ™์œผ๋ฉด 0)

    ex) a=1 , b=1 ์ผ๋•Œ a ^ b = 0

          a=1 , b=0 ์ผ๋•Œ a ^ b = 1

          a=0 , b=0 ์ผ๋•Œ a ^ b = 0

 

4.  ~a

      - a์˜ ๋ชจ๋“  ๋น„ํŠธ์— NOT ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.

 

5.  a << b OR a >> b

       - a์˜ ๋น„ํŠธ๋ฅผ ์™ผ์ชฝ(์˜ค๋ฅธ์ชฝ)์œผ๋กœ b๋งŒํผ ์‰ฌํ”„ํŠธํ•œ๋‹ค.

         ex) 1 << 2 : 2์˜ 2์Šน

               1 << 0 : 2์˜ 0์Šน 

 

์œ„์˜ ์—ฐ์‚ฐ์ž๋“ค์„ ์‘์šฉํ•˜์—ฌ ๋” ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1.idx๋ฒˆ์งธ ๋น„ํŠธ ์ผœ๊ธฐ

   S |= (1<<idx)

 

2. idx๋ฒˆ์งธ ๋น„ํŠธ ๋„๊ธฐ 

    S &= ~(1<<idx)

 

3. idx์— ๋Œ€ํ•œ XOR ์—ฐ์‚ฐ

    S ^= (1<<idx)

 

4. ์ตœํ•˜์œ„ ์ผœ์ ธ์žˆ๋Š” idx ์ฐพ๊ธฐ

     idx = (S & -S)

     * -S = (~S+1) ์˜ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.

      ex ) S = 1010 , ~S = 0101

             -S = 0101 + 1

                  = 0110

              S & -S = 2(๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค)

 

5. n์ธ ๋ชจ๋“  ์ง‘ํ•ฉ์˜ ๋น„ํŠธ ์ผœ๊ธฐ

     (1<<n) - 1

 

6. idx๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ ์žˆ๋Š” ์ง€ ํ™•์ธํ•˜๊ธฐ

    if(S & (1 << idx)) 

     

์ด ๊ฐœ๋…๋“ค์„ ์ˆ™์ง€ํ•˜๋ฉด ์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค !

 

์ฝ”๋“œ


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

import static java.lang.Math.abs;

public class Main {

    public static void main(String[] args) throws IOException {
        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        int bit=0;
        for(int i=0;i<num;i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int seq=0;

            switch (st.nextToken()){
                case "add":
                   seq = Integer.parseInt(st.nextToken());
                   bit |= (1<<(seq-1));
                   break;
                case "remove":
                    seq = Integer.parseInt(st.nextToken());
                    bit &= ~(1<<(seq-1));
                    break;
                case "check":
                    seq = Integer.parseInt(st.nextToken());
                    sb.append((bit & (1<<(seq-1))) != 0 ? "1\n" : "0\n");
                    break;
                case "toggle":
                    seq = Integer.parseInt(st.nextToken());
                    bit ^= (1 << (seq-1));
                    break;
                case "all":
                    bit |= (~0);
                    break;
                case "empty":
                    bit &= 0;
                    break;
            }
        }
        System.out.println(sb);
    }


}

 

๋น„ํŠธ๋งˆ์Šคํ‚น ๋ฌธ์ œ๋ฅผ ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ณจ๋“œ๋ฅผ ๋‹ฌ์„ฑํ•˜์˜€๋‹ค !

๋น„๋ก ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊บผ ์ฐธ๊ณ ํ•œ ์ฝ”๋“œ๋„ ์žˆ๊ณ  ์‰ฌ์šด ๋ฌธ์ œ๋“ค๋„ ๋งŽ์ด ํ’€์—ˆ์ง€๋งŒ ์–ด์ฐŒ๋๊ฑด ๊ณจ๋“œ๊นŒ์ง€ ์˜ค๊ฒŒ๋˜์—ˆ๋‹ค

 

์ด์ œ ํ”Œ๋ ˆํ‹ฐ๋„˜์„ ๋ชฉํ‘œ๋กœ ๋” ์—ด์‹ฌํžˆ ํ’€์–ด์•ผ๊ฒ ๋‹ค ใ…Žใ…Ž

 

 

๋ถ„์„


์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๋ฉด bfs์™€ dfs์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์•Œ์•„์•ผํ•œ๋‹ค.

 

dfs, bfs๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ๋ฐ, ๊ตฌํ˜„ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋ฏ€๋กœ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋œ๋‹ค.

(*๊ทธ๋ž˜ํ”„ : ๋…ธ๋“œ์™€ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…)

 

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(bfs)

- ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์Œ ๋ถ„๊ธฐ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ์™„์ „ํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค.

  ์Šคํƒ , ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์ข€ ๋” ๊ฐ„๋žตํ•œ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜จ๋‹ค.

  ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•ด์•ผํ•˜๊ฑฐ๋‚˜ , ๊ทธ๋ž˜ํ”„๊ฐ€ ํฐ ๊ฒฝ์šฐ ์‚ฌ์šฉ

 

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(bfs)

- ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. 

  ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ  ๋ฉ€๋ฆฌ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๋‚˜์ค‘์— ๋ฐฉ๋ฌธํ•œ๋‹ค.

  ํ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ

 

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    static StringBuilder sb = new StringBuilder();
    static int node, line, start;
    static int[][] arr;
    static boolean[] visit;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        node = Integer.parseInt(st.nextToken());
        line = Integer.parseInt(st.nextToken());
        start = Integer.parseInt(st.nextToken());

        visit = new boolean[node + 1];
        arr = new int[node + 1][node + 1];

        for (int i = 0; i < line; i++) {
            StringTokenizer str  = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(str.nextToken());
            int b = Integer.parseInt(str.nextToken());
            arr[a][b] = arr[b][a] = 1;
        }


        dfs(start);
        visit = new boolean[node + 1];
        sb.append("\n");
        bfs(start);
        System.out.println(sb);
    }

    static void dfs(int start) {
        sb.append(start + " ");
        visit[start] = true;
        for (int i = 1; i <= node; i++) {
            if (arr[start][i] == 1 && !visit[i]) {
                dfs(i);
            }
        }
    }

    static void bfs(int start) {
        Queue<Integer> q = new LinkedList<>();

        q.add(start);
        visit[start] = true;

        while(!q.isEmpty()){
            int value = q.poll();
            sb.append(value+" ");

            for(int i=1;i<=node;i++){
                if(arr[value][i] == 1 && !visit[i]){
                    visit[i] = true;
                    q.add(i);
                }
            }

        }
    }


}

๋ถ„์„


์™„์ „ํƒ์ƒ‰ ๋ฌธ์ œ์ด๋‹ค.

์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋น„๊ตํ•ด๊ฐ€๋ฉด์„œ ๋ฌด์‹ํ•˜๊ฒŒ ๋‹ต์„ ์ฐพ๋Š” ์ˆ˜ ๋ฐ–์—๋Š” ์—†๋‹ค..

 

์ธ์ ‘ํ•œ ์‚ฌํƒ•์˜ ์ƒ‰์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ•˜์˜€์ง€๋งŒ ๊ทธ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฑฐ ์ž์ฒด๊ฐ€ ๋” ๋น„ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์—

๋ชจ๋“  ์‚ฌํƒ•์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋ฉด์„œ ๋น„๊ตํ•ด๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์‚ฌํƒ•์„ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 

1. ์˜†์ž๋ฆฌ๋ผ๋ฆฌ ๋ฐ”๊พธ๊ธฐ

2. ์œ„์•„๋ž˜๋กœ ๋ฐ”๊พธ๊ธฐ

์ด๋ ‡๊ฒŒ ๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์„œ ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ๋น„๊ต๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.

 

์‚ฌํƒ•์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ ๋˜ํ•œ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ

1. ๊ฐ€๋กœ์ค„๋กœ ์‚ฌํƒ•์œผ๋กœ ๋จน๋Š” ๊ฒฝ์šฐ

2. ์„ธ๋กœ ์ค„๋กœ ์‚ฌํƒ•์„ ๋จน๋Š” ๊ฒฝ์šฐ

์ด ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ์‚ฌํƒ•์˜ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ๋งˆ๋‹ค ๊ฐ๊ฐ ๋น„๊ตํ•ด์ฃผ๋ฉด ๋œ๋‹ค !

 

์ฝ”๋“œ


import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static int num;
    static char[][] board;
    static int max = 0;

    public static void find_row() {
        int cnt = 1;
        for (int i = 0; i < num; i++) {
            cnt = 1;
            for (int j = 0; j < num-1; j++) {
                if (board[i][j] == board[i][j + 1]) {
                    cnt++;
                } else {
                    cnt = 1;
                }
                if (max < cnt) max = cnt;

            }

        }
    }

    public static void find_column() {
        int cnt = 1;
        for (int i = 0; i < num; i++) {
            cnt = 1;
            for (int j = 0; j < num-1; j++) {
                if (board[j][i] == board[j+1][i]) {
                    cnt++;
                } else {
                    cnt = 1;
                }
                if (max < cnt) max = cnt;

            }

        }

    }


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        num = sc.nextInt();
        board = new char[num][num];

        for (int i = 0; i < num; i++) {
            String str = sc.next();
            for (int j = 0; j < num; j++) {
                board[i][j] = str.charAt(j);
            }
        }
        char value;
        for (int i = 0; i < num; i++) {
            for (int j = 0; j < num-1; j++) {
                value = board[i][j];
                board[i][j] = board[i][j + 1];
                board[i][j + 1] = value;

                find_row();
                find_column();

                value = board[i][j];
                board[i][j] = board[i][j + 1];
                board[i][j + 1] = value;

            }

        }
        for (int i = 0; i < num-1; i++) {
            for (int j = 0; j < num; j++) {
                value = board[i][j];
                board[i][j] = board[i+1][j];
                board[i+1][j] = value;

                find_row();
                find_column();

                value = board[i][j];
                board[i][j] = board[i+1][j];
                board[i+1][j] = value;

            }

        }
        System.out.println(max);
    }
}

 

๋ถ„์„


 

 

์ผ๋‹จ ํฌ๋„์ฃผ๋ฅผ 3๊ฐœ๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž

 

ํฌ๋„์ฃผ๋ฅผ ์ œ์ผ ๋งŽ์ด ๋งˆ์‹œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”

1. ์ฒซ ๋ฒˆ์งธ , ๋‘ ๋ฒˆ์งธ ํฌ๋„์ฃผ๋ฅผ ๋งˆ์‹œ๋Š” ๊ฒฝ์šฐ

2. ์„ธ ๋ฒˆ์งธ , ์ฒซ ๋ฒˆ์งธ ํฌ๋„์ฃผ๋ฅผ ๋งˆ์‹œ๋Š” ๊ฒฝ์šฐ

3. ์„ธ ๋ฒˆ์งธ , ๋‘ ๋ฒˆ์งธ ํฌ๋„์ฃผ๋ฅผ ๋งˆ์‹œ๋Š” ๊ฒฝ์šฐ

 

ํฌ๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋‹ค.

dp[num] = max(max(dp[num - 3] + value[num - 1] + value[num], dp[num - 2] + value[num]),dp[num-1]);

 

3๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋น„๊ตํ•ด์ฃผ๋ฉด ๋œ๋‹ค !

 

 

์ฝ”๋“œ


import java.util.Arrays;
import java.util.Scanner;

import static java.lang.Math.max;


public class Main {

    static long[] dp;
    static long[] value;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int num = sc.nextInt();
        value = new long[10001];
        dp = new long[10001];
        for (int i = 1; i <= num; i++) {
            value[i] = sc.nextInt();
        }
        dp[0] = 0;
        dp[1] = value[1];
        dp[2] = value[2] + value[1];
        if (num == 2) {
            System.out.println(dp[2]);
            return;
        }
        for (int i = 3; i <= num; i++) {
            dp(i);
        }
        System.out.println(dp[num]);


    }

    static void dp(int num) {
        dp[num] = max(max(dp[num - 3] + value[num - 1] + value[num], dp[num - 2] + value[num]),dp[num-1]);
    }

}

+ Recent posts