๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
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)์ ๋ ๋ ๊ฒ์ด๋ค.
'๐ป ์ฝํ > ๐ JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋ถ๋ ๊ฐ๊ธฐ (3) | 2025.07.30 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๊ฐ์ฅ ๋ง์ด ๋ฐ์ ์ ๋ฌผ (4) | 2025.07.26 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์งํ ์ ๊ธฐ (0) | 2025.07.23 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋์์ ์ฌ์๊ธฐ (1) | 2025.07.21 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์ ์ฐ๊ทผ๋ฌด์ (3) | 2025.07.20 |