Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป ์ฝ”ํ…Œ/๐Ÿ“Œ JAVA

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/JAVA] ๊ณต์›

๋ฐ˜์‘ํ˜•

 

 

 

๐Ÿ”— ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

https://school.programmers.co.kr/learn/courses/30/lessons/340198

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 


๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ

 

 

์ฃผ์–ด์ง„ ๊ณต์› ์ƒํƒœ๋ฅผ ๋ณด๊ณ ,

์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์ง„ ์ •์‚ฌ๊ฐํ˜• ๋—์ž๋ฆฌ๋“ค ์ค‘์—์„œ ๊น” ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๋—์ž๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

์ด๋•Œ, ๋งŒ์•ฝ ๊น” ์ˆ˜ ์žˆ๋Š” ๋—์ž๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ“ฅ ์ž…๋ ฅ

  • mats
    • ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์ง„ ๋—์ž๋ฆฌ๋“ค์˜ ํ•œ ๋ณ€ ๊ธธ์ด๋ฅผ ๋‹ด์€ ์ •์ˆ˜ ๋ฐฐ์—ด
    • ex. [5, 3, 2]๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ, ์ง€๋ฏผ์ด๋Š” 5*5, 3*3, 2*2 ํฌ๊ธฐ์˜ ๋—์ž๋ฆฌ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • park
    • ๊ณต์›์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ 2์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด
    • "A", "B", "C" ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ → ์ด๋ฏธ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์•‰์•„์žˆ๋Š” ๊ณณ
    • "-1" → ์•„๋ฌด๋„ ์—†๋Š” ๋นˆ์ž๋ฆฌ

 


๐Ÿ’ก ์•„์ด๋””์–ด

1๏ธโƒฃ ๋—์ž๋ฆฌ ํฌ๊ธฐ ์ •๋ ฌํ•˜๊ธฐ

๋ฌธ์ œ์—์„œ ๋ฌผ์–ด๋ณธ ๊ฑด ๊น” ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๋—์ž๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด ํŽธํ•  ๊ฒƒ ๊ฐ™์•˜๋‹ค.

๋”ฐ๋ผ์„œ ์•„๋ž˜์˜ ์ฝ”๋“œ๋กœ ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์ง€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋—์ž๋ฆฌ ํฌ๊ธฐ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค.

Arrays.sort(mats);

 

 

2๏ธโƒฃ ๊ณต์› ํฌ๊ธฐ ๊ณ„์‚ฐํ•˜๊ธฐ

park๋Š” 2์ฐจ์› ๋ฐฐ์—ด์ด๊ณ , [ํ–‰][์—ด] ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์—

๊ณต์›์˜ ๊ฐ€๋กœ์™€ ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ์•„๋ž˜์˜ ์ฝ”๋“œ๋กœ ๊ตฌํ•ด์ฃผ์—ˆ๋‹ค.

int width = park[0].length;
int height = park.length;

 

 

3๏ธโƒฃ ๊ฐ€์žฅ ํฐ ๋—์ž๋ฆฌ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๊ธฐ

์ •๋ ฌ๋œ mats ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๊บผ๋‚ด ํ™•์ธํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ •๋ ฌํ•œ ๋ฐฐ์—ด์ด [2, 3, 5]์˜€๋‹ค๋ฉด,

์‹ค์ œ ๊ฒ€์‚ฌํ•  ๋•Œ๋Š” ๊ฐ€์žฅ ํฐ 5๋ถ€ํ„ฐ 5, 3, 2 ์ˆœ์„œ๋กœ ๊ฒ€์‚ฌํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

for (int k = mats.length - 1; k >= 0; k--) {
    int size = mats[k];
    ...
}

 

 

4๏ธโƒฃ ๊ณต์›์˜ ๋ชจ๋“  ์ขŒํ‘œ์— ๋Œ€ํ•ด ์‹œ๋„ํ•ด๋ณด๊ธฐ

3๋ฒˆ์„ ํ†ตํ•ด ํ˜„์žฌ ํ…Œ์ŠคํŠธ ์ค‘์ธ ๋—์ž๋ฆฌ์˜ ํฌ๊ธฐ (size)๋ฅผ

์ด์ œ ๊ณต์›์— ๊น” ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋“  ์œ„์น˜์—์„œ ์‹œ๋„ํ•ด๋ณด๋ฉด ๋œ๋‹ค.

 

์ด๋•Œ, ๊ณต์› ๋์„ ๋„˜์ง€ ์•Š๋„๋ก ๋ฐ˜๋ณต์˜ ์ข…๋ฃŒ ์กฐ๊ฑด์„

i <= height - size, j <= width - size๋กœ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๊ณต์›์˜ ํฌ๊ธฐ๊ฐ€ 6 * 8์ธ๋ฐ, ๋—์ž๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ 3์ด๋ฉด

์–ด์ฐจํ”ผ i = 0 ~ 3, j = 0 ~ 5 ์ด์™ธ์˜ ์œ„์น˜๋Š” ๋—์ž๋ฆฌ๋ฅผ ๊นŒ๋Š” ์‹œ์ž‘ ๋ฒ”์œ„๊ฐ€ ๋  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

์„ค์น˜ ์‹œ์ž‘ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„ = โœ…

์„ค์น˜ ์‹œ์ž‘ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„ = ๐Ÿšซ

โœ… โœ… โœ… โœ… ๐Ÿšซ ๐Ÿšซ
โœ… โœ… โœ… โœ… ๐Ÿšซ ๐Ÿšซ
โœ… โœ… โœ… โœ… ๐Ÿšซ ๐Ÿšซ
โœ… โœ… โœ… โœ… ๐Ÿšซ ๐Ÿšซ
โœ… โœ… โœ… โœ… ๐Ÿšซ ๐Ÿšซ
โœ… โœ… โœ… โœ… ๐Ÿšซ ๐Ÿšซ
๐Ÿšซ ๐Ÿšซ ๐Ÿšซ ๐Ÿšซ ๐Ÿšซ ๐Ÿšซ
๐Ÿšซ ๐Ÿšซ ๐Ÿšซ ๐Ÿšซ ๐Ÿšซ ๐Ÿšซ

 

for (int i = 0; i <= height - size; i++) {
    for (int j = 0; j <= width - size; j++) {
        ...
    }
}

 

 

5๏ธโƒฃ ํ•ด๋‹น ์‹œ์ž‘ ์œ„์น˜์—์„œ ์‹ค์ œ๋กœ ๋—์ž๋ฆฌ๋ฅผ ๊น” ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ธฐ

๋‚˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋”ฐ๋กœ calculate ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ถ„๋ฆฌํ•ด์ฃผ์—ˆ๋‹ค.

private boolean calculate(String[][] park, int x, int y, int size){
        
    for(int i = x; i < x + size; i++){
        for(int j = y; j < y + size; j++){
            if(!park[i][j].equals("-1")){
                return false;
            }
        }
    }
        
    return true;
}

 

  • x, y๋Š” ๋—์ž๋ฆฌ ๊น”๊ธฐ์˜ ์‹œ์ž‘ ์œ„์น˜
  • size๋Š” ๋—์ž๋ฆฌ์˜ ํฌ๊ธฐ

 

  • size ๋งŒํผ ์•„๋ž˜์™€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•ด๋ณด๋ฉด์„œ ๋—์ž๋ฆฌ ํฌ๊ธฐ ๋งŒํผ์˜ ์˜์—ญ์„ ํ™•์ธํ•ด๋ณธ๋‹ค.
  • ์ด๋•Œ, ์ค‘๊ฐ„์— ํ•˜๋‚˜๋ผ๋„ ์‚ฌ๋žŒ์ด ์•‰์•„์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด, ๋—์ž๋ฆฌ๋ฅผ ๊น” ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฐ”๋กœ false๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.
  • ๋งŒ์•ฝ ๋ฐ˜๋ณต๋ฌธ์„ ๋‹ค ๊ฒ€์‚ฌํ•ด์„œ ํ†ต๊ณผํ–ˆ๋‹ค๋ฉด ๋—์ž๋ฆฌ๋ฅผ ๊น” ์ˆ˜ ์žˆ์œผ๋‹ˆ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 


๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์ตœ์ข… ์ฝ”๋“œ

import java.util.*;

class Solution {
    
    private boolean calculate(String[][] park, int x, int y, int size){
        
        for(int i = x; i < x + size; i++){
            for(int j = y; j < y + size; j++){
                if(!park[i][j].equals("-1")){
                    return false;
                }
            }
        }
        
        return true;
    }
    
    public int solution(int[] mats, String[][] park) {
        int width = park[0].length;
        int height = park.length;
        
        Arrays.sort(mats);
       
        for(int k = mats.length - 1; k >= 0; k--){
            int size = mats[k];
            
            for(int i = 0; i <= height - size; i++){
                for(int j = 0; j <= width - size; j++){
                    if(calculate(park, i, j, size)){
                        return size;
                    }
                }
            }
        }
        
        return -1;
    }
}

 

 


๐Ÿ•‘ ์‹œ๊ฐ„ ๋ณต์žก๋„

for (int k = mats.length - 1; k >= 0; k--) {         // (1) ๋—์ž๋ฆฌ ๊ฐœ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณต
    int size = mats[k];
    
    for (int i = 0; i <= height - size; i++) {       // (2) ๊ณต์›์˜ ์„ธ๋กœ ํฌ๊ธฐ ๋งŒํผ ๋ฐ˜๋ณต
        for (int j = 0; j <= width - size; j++) {    // (3) ๊ณต์›์˜ ๊ฐ€๋กœ ํฌ๊ธฐ ๋งŒํผ ๋ฐ˜๋ณต
        
            if (calculate(park, i, j, size)) {       // (4) ํ•ด๋‹น ์œ„์น˜์— ๋—์ž๋ฆฌ ๊น” ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
                return size;
            }
        }
    }
}

 

for (int i = x; i < x + size; i++) {                 // size๋ฒˆ ๋ฐ˜๋ณต
    for (int j = y; j < y + size; j++) {             // size๋ฒˆ ๋ฐ˜๋ณต
        if (!park[i][j].equals("-1")) {
            return false;
        }
    }
}

 

 

  • mats.length๋Š” ์ตœ๋Œ€ 10์ด๋ฏ€๋กœ (1) ์—์„œ๋Š” ์ตœ๋Œ€ ๋ฐ˜๋ณต 10ํšŒ
  • (i, j) ๋ฐ˜๋ณต ๋ถ€๋ถ„์—์„œ๋Š”,
    • i๋Š” ์ตœ๋Œ€ height - size + 1๋ฒˆ ๋ฐ˜๋ณต
    • j๋Š” ์ตœ๋Œ€ width - size + 1๋ฒˆ ๋ฐ˜๋ณต → ์ตœ๋Œ€ 50
    • ์ด 50 * 50 = 2500๋ฒˆ ๋ฐ˜๋ณต
  • calculate์—์„œ๋Š” ํ•œ ๋ฒˆ ํ˜ธ์ถœ ๋‹น size * size ๋ฒˆ ๋ฐ˜๋ณต
    • ๋—์ž๋ฆฌ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋Š” 20 * 20์ด๋‹ˆ ์ตœ๋Œ€ 400๋ฒˆ ๋ฐ˜๋ณต

 

๐Ÿ‘‰๐Ÿป ๋”ฐ๋ผ์„œ ์ตœ์ข… ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(m × h × w × s² )์ด๋‹ค.

(์ด ๋•Œ, m์€ ๋—์ž๋ฆฌ ์ข…๋ฅ˜์˜ ์ˆ˜, h์™€ w์€ ๊ณต์›์˜ ์„ธ๋กœ ๊ฐ€๋กœ ๊ธธ์ด, s๋Š” ๋—์ž๋ฆฌ์˜ ํฌ๊ธฐ์ด๋‹ค.)

 

n์„ ๋Œ€๋žต 50 ์ •๋„๋กœ ๋ณด๊ณ  ์ข€ ๋” ๋‹จ์ˆœํ™” ํ•œ๋‹ค๋ฉด O(n ^4)์ •๋„ ๋  ๊ฒƒ์ด๋‹ค.

๋ฐ˜์‘ํ˜•