๊ธฐ๋ก๋ฐฉ

Lv.2 : n^2 ๋ฐฐ์—ด ์ž๋ฅด๊ธฐ ๋ณธ๋ฌธ

CodingTest/Java

Lv.2 : n^2 ๋ฐฐ์—ด ์ž๋ฅด๊ธฐ

Soom_1n 2023. 9. 23. 20:34

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

 

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

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

programmers.co.kr



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

  • n x n ๊ฒฉ์žํŒ์— (0, 0) ๋ถ€ํ„ฐ (n - 1, n - 1)๊นŒ์ง€ ํŒŒ๋™์ด ํผ์ง€๋“ฏ ์ˆซ์ž๋ฅผ ์ฑ„์šด๋‹ค.
  • ๊ฐ ํ–‰์„ ์ˆœ์„œ๋Œ€๋กœ ์ด์–ด ๋ถ™์ธ ๋’ค, 0๋ถ€ํ„ฐ n-1 ์ค‘ left ~ right๋ฅผ ์ž˜๋ผ์„œ int ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

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

  • ๊ฒฉ์žํŒ์˜ ์ˆซ์ž๋Š” 1 ~ n ์œผ๋กœ ์ฑ„์šฐ์ง€๋งŒ, ์ธ๋ฑ์Šค๋Š” 0 ~ n-1 ์ด๋ผ๋Š” ์ ์— ์ฃผ์˜ํ•œ๋‹ค.
  • n์˜ ๋ฒ”์œ„๊ฐ€ 100๋งŒ์ด๊ณ , left, right๋Š” n^2๊นŒ์ง€ ์ฃผ์–ด์ง„๋‹ค๊ณ  ํ•œ๋‹ค.
    • ํ•˜์ง€๋งŒ ๋ฐ˜ํ™˜ ๋ฐฐ์—ด์ด int ํ˜•์ด๊ณ  ๋ฌธ์ œ ์กฐ๊ฑด์— rifht - left๋Š” 1๋งŒ ๋ฏธ๋งŒ์ด๋ผ๊ณ  ์ฃผ์–ด์กŒ๋‹ค.
    • ๊ฒฉ์žํŒ์— ๊ฐ’์„ ์ „๋ถ€ ์ €์žฅํ•˜๋ฉด 100๋งŒ * 100๋งŒ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ดˆ๊ณผํ•œ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ์ธ๋ฑ์Šค๋งŒ ์ด๋™ํ•˜๋ฉฐ ์ •๋‹ต ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด๋‚ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํ’€์ด๋ฅผ ์œ„ํ•ด 3ํšŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค
    • ์ฒซ ํ’€์ด๋Š” ๊ฒฉ์žํŒ ๊ฐ’์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
    • ๋‘ ๋ฒˆ์งธ ํ’€์ด๋Š” left์™€ right๊ฐ€ ๊ฒฉ์žํŒ์—์„œ ๊ฐ™์€ ํ–‰์ธ์ง€ ํ™•์ธํ•ด์„œ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•œ ์ฝ”๋“œ๋กœ ์ •๋‹ต์ด ๋‚˜์˜ค๊ธด ํ–ˆ๋‹ค.
    • ์„ธ ๋ฒˆ์งธ ํ’€์ด๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ๋ณด๊ณ  ๋ฆฌํŽ™ํ† ๋ง ํ•œ ๊ฒƒ์ธ๋ฐ, left์™€ right๋ฅผ ๊ตฌ๋ถ„ํ•ด ๋”ฐ๋กœ ์ฒ˜๋ฆฌ ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ 1 : ์˜ค๋‹ต ์ฝ”๋“œ ๐Ÿ”ธ

class Solution {
    public int[] solution(int n, long left, long right) {
        
        int[][] arr = new int[n][n];
        
        for(int i = 0; i < n; i++) {
            for(int j = 0; j <= i; j++) {
                arr[i][j] = i+1;
                arr[j][i] = i+1;
            }
        }
        
        int[] answer = new int[(int)(right-left)+1];
        int cnt = 0;
        
        for(int i = (int)left; i <= (int)right; i++) {
            answer[cnt++] = arr[i/n][i%n];
        }
        
        return answer;
    }
}

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

  • ๊ฒฉ์žํŒ์˜ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , ์ธ๋ฑ์Šค๋ฅผ ์ด๋™ํ•˜๋ฉฐ answer ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ 2 : ์ •๋‹ต ์ด์ง€๋งŒ ๋น„ํšจ์œจ์  ๐Ÿ”ธ

class Solution {
    public int[] solution(int n, long left, long right) {
        int[] answer = new int[(int)(right-left)+1];
        
        int lr = (int)(left / n);   // left row
        int lc = (int)(left % n);   // left col
        int rr = (int)(right / n);  // right row
        int rc = (int)(right % n);  // right col
                
        int cnt = 0;
        
        if(lr == rr) {
            for(int i = lc; i <= rc; i++) {
                answer[cnt++] = (lr > i ? lr : i) + 1;
            }
        } else { // lr < rr
            // row == lr
            for(int col = lc; col < n; col++) {
                answer[cnt++] = (lr > col ? lr : col) + 1;
            }
            
            // lr < row < rr
            for(int row = lr + 1; row < rr; row++) {
                for(int col = 0; col < n; col++) {
                    answer[cnt++] = (row > col ? row : col) + 1;
                }
            }
            
            // row == rr
            for(int col = 0; col <= rc; col++) {
                answer[cnt++] = (rr > col ? rr : col) + 1;
            }
        }  
        
        return answer;
    }
}

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

  • left์™€ right์˜ ํ–‰๊ณผ ์—ด ์ธ๋ฑ์Šค๋ฅผ lr, lc, rr, rc๋กœ ๋‚˜๋ˆ  ์‚ฌ์šฉํ–ˆ๋‹ค.
    • ๊ฐ™์€ ํ–‰์ด๋ผ๋ฉด ์—ด๋งŒ ์ด๋™ํ•ด์„œ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
    • ๋‹ค๋ฅธ ํ–‰์ด๋ผ๋ฉด left์˜ ํ–‰, right์˜ ํ–‰, ๋‘˜ ์‚ฌ์ด์˜ ํ–‰์œผ๋กœ ๋‚˜๋ˆ  ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ 2 : ์ตœ์ข… ์ฝ”๋“œ ๐Ÿ”ธ

class Solution {
    public int[] solution(int n, long left, long right) {
        
        int[] answer = new int[(int)(right-left)+1];
        int cnt = 0;
        
        for(long i = left; i <= right; i++) {
            answer[cnt++] = (i/n > i%n ? (int)(i/n) : (int)(i%n)) + 1;
        }
        
        return answer;
    }
}

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

  • ๊ฒฉ์žํŒ์˜ ๊ฐ’์€ ํ–‰๊ณผ ์—ด ์ธ๋ฑ์Šค ์ค‘ ํฐ ๊ฐ’์ด๋ผ๋Š” ์›๋ฆฌ๊ฐ€ ํ•ต์‹ฌ์ด๋‹ค.
  • ๋˜ํ•œ ๊ฐ’์€ 1๋ถ€ํ„ฐ n์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค์— +1 ๋กœ ๊ณ„์‚ฐํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • 2์ฐจ์› ๋ฐฐ์—ด์—์„œ ์นธ์˜ ์ˆœ์„œ์˜ ๋ชซ๊ณผ ๋‚˜๋จธ์ง€๋กœ ํ–‰์—ด ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์›๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฌธ์ œ์ด๋‹ค.
  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋Š” ์ฐธ๊ณ ๋งŒ ํ–ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—” ์ง์ ‘ ๋ฆฌํŒฉํ† ๋งํ•ด๋ณด๋‹ˆ ํ›จ์”ฌ ๋„์›€์ด ๋œ ๊ฒƒ ๊ฐ™๋‹ค.
    • ์•ž์œผ๋กœ๋„ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฆฌํŒฉํ† ๋ง์„ ๋งŽ์ด ํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋ˆˆ์— ๋„๋Š” ํ’€์ด ์ค‘์—๋Š” java์˜ Stream์„ ์ด์šฉํ•œ ํ•œ ์ค„ ํ’€์ด๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ์ฒ˜์Œ์—” ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋‹ค๊ฐ€ ๋ฆฌํŒฉํ† ๋ง ํ›„์—๋Š” ์ดํ•ด ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    • Stream ๋ฌธ๋ฒ•์€ ์ž˜์€ ๋ชฐ๋ผ์„œ ๋‚˜์ค‘์— ํ•œ ๋ฒˆ ๊ณต๋ถ€ํ•ด ๋ณผ ์ƒ๊ฐ์ด๋‹ค.
  • ์ฑ„์  ๊ฒฐ๊ณผ๋Š” ์™ผ์ชฝ์ด ์ฝ”๋“œ 2, ์˜ค๋ฅธ์ชฝ์ด ์ฝ”๋“œ 3์ด๋‹ค.
    • ์ฝ”๋“œ 3์ด ์กฐ๊ธˆ ๋” ๋Š๋ฆฐ๋Œ€์‹  ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ ๊ฒŒ ์“ฐ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ๋ชซ๊ณผ ๋‚˜๋จธ์ง€ ๊ณ„์‚ฐ์ด ์ค‘๋ณต์œผ๋กœ ์ผ์–ด๋‚˜์„œ ์กฐ๊ธˆ ๋” ๋Š๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ฝ”๋“œ 2๊ฐ€ for๋ฌธ ์†์—์„œ ์„ ์–ธ์„ ๋ช‡ ๋ฒˆ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์†Œ๋ชจ ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

728x90