본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] [PCCE 기출문제] 10번 / 공원

by 현장 2026. 3. 20.

-Code

import java.util.*;

class Solution {
    public int solution(int[] mats, String[][] park) {
        // 큰 사이즈 부터 검사해야 하므로 정렬
        Arrays.sort(mats);
        // 사이즈 큰것부터 검사
        for (int i = mats.length - 1; i >= 0; i--) {
            int size = mats[i];
            for (int row = 0; row < park.length; row++) {
                for (int col = 0; col < park[row].length; col++) {
                    // 빈 공간이고 해당 사이즈 깔 수 있으면 사이즈 반환
                    if (park[row][col].equals("-1") && isOk(park, row, col, size)) {
                        return size;
                    }
                }
            }
        }
        return -1;
    }

    private boolean isOk(String[][] park, int row, int col, int size) {
        // 공원을 벗어나지 않는지 확인
        if (row + size > park.length || col + size > park[0].length) {
            return false;
        }
        // 해당 사이즈의 돗자리를 깔수 있는지 확인
        for (int r = 0; r < size; r++) {
            for (int c = 0; c < size; c++) {
                if (!park[r + row][c + col].equals("-1")) {
                    return false;
                }
            }
        }
        return true;
    }
}

범위 문제를 간과했고, 추가적으로 사이즈 검사 시 맵을 돌면서 비어있으면 검사하도록 해 최댓값이 나오지 않았습니다. 그래서 사이즈를 기준으로 검사하는 식으로 수정해 해결했습니다.