๊ธฐ๋ก๋ฐฉ

Lv.3 : ๊ณ ๊ณ ํ•™ ์ตœ๊ณ ์˜ ๋ฐœ๊ฒฌ ๋ณธ๋ฌธ

CodingTest/Java

Lv.3 : ๊ณ ๊ณ ํ•™ ์ตœ๊ณ ์˜ ๋ฐœ๊ฒฌ

Soom_1n 2024. 8. 15. 19:12

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • N*N ํ–‰๋ ฌ์—์„œ ๋ชจ๋“  ์นธ์˜ ์ˆซ์ž(์‹œ๊ณ„)๋ฅผ 0(12์‹œ๋ฐฉํ–ฅ)์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
    • 0 : 12์‹œ, 1 : 3์‹œ, 2 : 6์‹œ, 3 : 9์‹œ
  • ํ•œ ์นธ์˜ ์‹œ๊ณ„๋ฅผ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆด ์ˆ˜ ์žˆ๊ณ , ๋Œ๋ฆฌ๋ฉด ์ƒํ•˜์ขŒ์šฐ ์ธ์ ‘ํ•œ ์‹œ๊ณ„๋„ ํ•จ๊ป˜ ๋Œ์•„๊ฐ„๋‹ค.
  • ๋ชจ๋“  ์‹œ๊ณ„๋ฅผ 12์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ๋งŒ๋“œ๋Š” ์ตœ์†Œ ์กฐ์ž‘ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ์ ธ๋ด์•ผ ํ•˜๋Š”๋ฐ, BruteForce๋Š” O(64^4)์ด๋ฏ€๋กœ ๋„ˆ๋ฌด ํฌ๋‹ค.
  • Greedy ์ ‘๊ทผ์œผ๋กœ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์‹œ๊ณ„๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ˆœ์„œ๋Š” ์ƒ๊ด€ ์—†์œผ๋ฏ€๋กœ ์œ„์ชฝ์—์„œ ์•„๋ž˜์ชฝ ํ–‰์œผ๋กœ ์กฐ์ž‘ํ•˜๊ณ ์ž ํ•œ๋‹ค.
    • ์ฒซ ํ–‰์˜ ์ƒํƒœ๋งŒ ์ž„์˜๋กœ ์ •ํ•˜๋ฉด, ๋‹ค์Œ ํ–‰์€ ์œ„์ชฝ ํ–‰์„ 0์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋Œ๋ฆฌ๋ฉด ๋œ๋‹ค.
    • ๋งˆ์ง€๋ง‰ ํ–‰๊นŒ์ง€ ๋Œ๋ ธ์„ ๋•Œ ๋ชจ๋‘ 0์ธ ๊ฒฝ์šฐ์˜ ์ตœ์†Œ ์กฐ์ž‘ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
    • ์ฒซ ํ–‰๋งŒ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ์ ธ๋ณด๋ฉด ๋˜๋ฏ€๋กœ O(8^4)๋กœ ์ค„์–ด๋“ ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

class Solution {
    private final int[][] dir = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; // ์ƒ ์šฐ ํ•˜ ์ขŒ
    private int n;
    
    public int solution(int[][] clockHands) {
        
        int min = Integer.MAX_VALUE;
        n = clockHands.length;
        
        // Greedy
        for(int i = 0; i < (1 << (2*n)); i++) { // ์ฒซ ํ–‰ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜
            int[][] copy = deepCopy(clockHands);
            int cnt = 0;
            int temp = i;
            
            // ์ฒซ ํ–‰ ์กฐ์ž‘
            for(int col = 0; col < n; col++) { // ์˜ค๋ฅธ์ชฝ ๋ถ€ํ„ฐ 0~3 ์œผ๋กœ ๋Œ๋ ค๋ณด๊ธฐ
                int rotateCnt = temp % 4;
                temp /= 4;
                cnt += rotateCnt;
                rotate(copy, 0, col, rotateCnt);
            }
            
            // ๋‚˜๋จธ์ง€ ํ–‰ ์กฐ์ž‘
            for(int row = 1; row < n; row++) {
                for(int col = 0; col < n; col++) {
                    int rotateCnt = (4 - copy[row-1][col]) % 4; // ๋ฐ”๋กœ ์œ—ํ–‰ ๊ฐ’์„ 0์œผ๋กœ ๋งŒ๋“œ๋Š” ํšŒ์ „์ˆ˜
                    cnt += rotateCnt;
                    rotate(copy, row, col, rotateCnt);
                }
            }
            
            // ๋งˆ์ง€๋ง‰ ํ–‰์ด ๋ชจ๋‘ 0์ธ์ง€ ํ™•์ธ
            boolean flag = true;
            for(int col = 0; col < n; col++) {
                if(copy[n-1][col] != 0)  {
                    flag = false;
                    break;
                }
            }
            if(flag) min = Math.min(min, cnt);
        }

        return min;
    }
    
    private void rotate(int[][] arr, int row, int col, int rotateCnt) {
        arr[row][col] = (arr[row][col] + rotateCnt) % 4; // ํ˜„์žฌ ์ขŒํ‘œ ๋Œ๋ฆผ
        for(int[] d : dir) {
            int r = row + d[0];
            int c = col + d[1];
            if( 0 <= r && r < n && 0 <= c && c < n) {
                arr[r][c] = (arr[r][c] + rotateCnt) % 4; // 4๋ฐฉ ์ขŒํ‘œ ๋Œ๋ฆผ
            }
        }
    }
    
    private int[][] deepCopy(int[][] arr) {
        int[][] copy = new int[n][n];
        for(int i = 0; i < n; i++) {
            System.arraycopy(arr[i], 0, copy[i], 0, n);
        }
        return copy;
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์ฒซ ํ–‰์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” n์นธ์„ 0~3 ์ˆซ์ž๋กœ ์ฑ„์šฐ๋Š” ๊ฒƒ์ด๋‹ค.
    • 1๋ถ€ํ„ฐ 4^n๊นŒ์ง€ ํ‚ค์›Œ๋‚˜๊ฐ€๋ฉด ๋˜๋Š”๋ฐ, 1 << (2 * n)์œผ๋กœ 4*n์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • 4 ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์œผ๋กœ n ๋ฒˆ์งธ๋ถ€ํ„ฐ 0๋ฒˆ์งธ ์นธ์„ ์ฑ„์šธ ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹ค์Œ ์นธ์„ ์ฑ„์šธ ๋•Œ๋Š” 4๋กœ ๋‚˜๋ˆˆ ๋ชซ์„ ๊ฐ’์œผ๋กœ ์ €์žฅํ•ด ๋„˜๊ธด๋‹ค.
  • ์ฒซ ํ–‰์˜ ๊ฐ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ์ ธ๋ณด๊ธฐ ์œ„ํ•ด ์ž…๋ ฅ ๋ฐ›์€ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค.
    • ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” deepCopy() ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ํ•œ ์‹œ๊ณ„๋ฅผ ๋Œ๋ ธ์„ ๋•Œ, ์ธ์ ‘ ์‹œ๊ณ„๋„ ๋Œ์•„๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ rotate() ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ์ฒซ ํ–‰์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ–‰์ด ๊ฐ๊ฐ ์œ„์ชฝ ํ–‰์˜ ๊ฐ’์„ ๋ชจ๋‘ 0์œผ๋กœ ๋งŒ๋“ค๋„๋ก ์กฐ์ž‘ํ•œ๋‹ค.
  • ๋งˆ์ง€๋ง‰ ํ–‰๊นŒ์ง€ ๋ชจ๋‘ 0์ด ๋œ ๊ฒฝ์šฐ์—์„œ ์กฐ์ž‘ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ธฐ๋กํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ƒ๋‹นํžˆ ์–ด๋ ต๊ฒŒ ๋‹ค๊ฐ€์˜จ ๋ฌธ์ œ์ด๋‹ค. ์ฒ˜์Œ์—” ๋ฌธ์ œ ๋ถ„์„๊ณผ ํ’€์ด ์ „๋žต์„ ์ ์–ด๊ฐ€๋ฉฐ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๊ณ , ๊ทธ๋ฆฌ๋””๋ฅผ ์„ ํƒํ–ˆ์ง€๋งŒ ๋ฐฉ๋ฒ•์ด ํ‹€๋ ค์„œ ํ…Œ์ŠคํŠธ1, ํ…Œ์ŠคํŠธ2๋ฅผ ์ œ์™ธํ•˜๊ณ  ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ์—ˆ๋‹ค.
/*
< ๋ฌธ์ œ ์ •๋ฆฌ >
  - N*N ํ–‰๋ ฌ์— ์‹œ๊ณ„๋“ค์ด ์ฑ„์›Œ์žˆ์Œ (N : clockHands์˜ ๊ธธ์ด)
  - ์‹œ๊ณ„๋Š” ์ƒํ•˜์ขŒ์šฐ 4๋ฐฉํ–ฅ (12์‹œ๋ถ€ํ„ฐ ์‹œ๊ณ„๋ฐฉํ–ฅ 0,1,2,3)
  - ์ตœ์†Œ ์กฐ์ž‘์œผ๋กœ ๋ชจ๋“  ๋ฐฉํ–ฅ์ด 0์ด ๋˜๋„๋ก ํ•˜๊ธฐ

< ํ’€์ด ๊ณ„ํš >
1) ์•Œ๊ณ ๋ฆฌ์ฆ˜
    - DFS
        - ํ–‰๋ ฌ์˜ ์ƒํƒœ ์ €์žฅ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ DFS ์–ด๋–ค๊ฐ€
        - ๊ทธ๋Ÿผ ๊นŠ์ด์˜ ์ตœ๋Œ€๋Š”? -> ๊ฐ€๋Š ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์œผ๋‹ˆ ํฌ๊ธฐ
    - ๊ทธ๋ฆฌ๋””**
        - ๋Œ๋ ธ์„ ๋•Œ 12์‹œ๊ฐ€ ๋˜๋Š” ๋ฐ”๋Š˜์ด ๋งŽ์œผ๋ฉด +1, ์ฃผ๋ณ€์— 0 ๊ฐœ์ˆ˜๋Š” -1
    - BFS
        - ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด๋กœ?
        - ์ตœ๋Œ€ 64์นธ์„ 4๊ฐ€์ง€ ๊ฒฝ์šฐ์˜์ˆ˜ : 4^64 = ๋„ˆ๋ฌดํผ
    - ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰
        - ๋ชจ๋‘ 12์‹œ ์ƒํƒœ์—์„œ ๊ธฐ์กด ์ƒํƒœ ๋งŒ๋“ค๊ธฐ
        - ์ž˜ ๋ชจ๋ฅด๊ฒ ์Œ
    - ๊ทธ๋ฆฌ๋”” ---- ์ •๋‹ต ํ’€์ด 2๊ฐœ๋งž๊ณ  ๋‚˜๋จธ์ง€ ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚˜์„œ ํ’€์ด ๋ด„
        - >> ์กฐ์ž‘ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ทœ์น™์„ ์ •ํ•ด ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์กฐ์ž‘ํ•˜๋ฉด ๋จ <<
        - ์œ„์— ์ฒซ ํ–‰์„ ์ž„์˜์กฐ์ž‘ํ•˜๊ณ , ๋‹ค์Œ ํ–‰์—์„œ ์œ— ์ค„์ด 0์ด ๋˜๋„๋ก ์กฐ์ž‘
        - ๋งˆ์ง€๋ง‰ ํ–‰๊นŒ์ง€ ์™„๋ฃŒํ–ˆ์„ ๋•Œ ๋ชจ๋‘ 0์ด ๋๋Š”์ง€ ํ™•์ธ
        - ์ฒซ ํ–‰์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒ ๋”ฐ์ง€๋ฉด ๋˜๋ฏ€๋กœ, ๋ธŒ๋ฃจํŠธํฌ์Šค 4^64์—์„œ -> ๊ทธ๋ฆฌ๋”” 4^8๋กœ ์ค„์–ด๋“ฆ
        
2) ๋ฉ”์„œ๋“œ
    - ์ผ๋‹จ ๋Œ๋ฆฌ๋Š”๊ฑด 1ํšŒ๋‹น ์‹œ๊ณ„๋ฐฉํ–ฅ 1์นธ
    - ์ธ์ ‘ํ•œ ์ธ๋ฑ์Šค๋„ ํšŒ์ „ ํ•˜๋Š” ๊ธฐ๋Šฅ ํ•„์š”
*/
  • ๊ฒฐ๊ตญ ํ’€์ด ์ „๋žต ํžŒํŠธ๋ฅผ ๋ดค์ง€๋งŒ, ์ฒซ ํ–‰์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•  ์ง€ ๋ชฐ๋ผ์„œ ์ •๋‹ต ์ฝ”๋“œ๊นŒ์ง€ ๋ณด๊ณ  ํด๋ก  ์ฝ”๋”ฉ ํ•˜๋“ฏ ํ’€์ด๋ฅผ ์ œ์ถœํ–ˆ๋‹ค.
  • ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ ํ’€์ด ์š”์†Œ๋Š” ์กฐ์ž‘ ์ˆœ์„œ๊ฐ€ ์ƒ๊ด€ ์—†์œผ๋ฏ€๋กœ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์ผ์ •ํ•˜๊ฒŒ ๋Œ๋ฆฌ๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
    • ์œ„ ํ’€์ด์—์„œ๋„ ์ฒซ ํ–‰์˜ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค ๋•Œ n-1๋ฒˆ๋ถ€ํ„ฐ 0๋ฒˆ ์ธ๋ฑ์Šค ๊นŒ์ง€ ๊ฐ’์„ ์ฑ„์›Œ๋‚˜๊ฐ€๋ฉฐ ๋Œ๋ ธ๊ณ ,
      ๊ทธ ๋‹ค์Œ์€ ํ–‰์„ 1~n-1 ๊นŒ์ง€ ์ด๋™ํ•˜๋ฉฐ ๊ฐ’์„ ์ฑ„์›Œ ๋‚˜๊ฐ”๋‹ค.
  • ์ฒซ ํ–‰์˜ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๋•Œ ๋น„ํŠธ ์—ฐ์‚ฐ๊ณผ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ๊ธฐ๊ฐ€๋ง‰ํžˆ๊ฒŒ ์‚ฌ์šฉํ•œ๊ฑธ ๋ณด๊ณ  ๊ฐํƒ„ํ–ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ๋ชจ๋กœ ๋ฐฐ์šด๊ฒŒ ๋งŽ์€ ๋ฌธ์ œ์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

728x90