문제 풀이/문제 풀이(프로그래머스)

[PCCE 기출문제] 10번 / 공원

풀뿌리 2024. 10. 25. 09:38

문제 위치 : https://school.programmers.co.kr/learn/courses/30/lessons/340198

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

가능한 깔 수 있는 최대 크기의 돗자리를 구하는 문제이다.

반복적으로 진행하여 최댓값을 구하는 것이 중요한 문제이므로 돗자리 설치 가능 여부를 함수화하여 분리하였다.

 

함수는 완전 탐색으로 진행하였다.

 

이후 모든 돗자리의 한 변 크기에 대하여 반복적으로 함수를 진행하여 최대값을 탐색하였다.

#include <string>
#include <vector>

using namespace std;

bool isSizeok(int mat_size, vector<vector<string>> park){
    bool ok = true;
    int park_row, park_col;
    park_row = park.size();
    park_col = park[0].size();
    
   for(int l = 0; l <= park_row - mat_size; l++) {
        for(int k = 0; k <= park_col - mat_size; k++) {
            ok = true;
            for(int i = 0; i < mat_size; i++) {
                for(int j = 0; j < mat_size; j++) {
                    if (park[i + l][j + k] != "-1") {
                        ok = false;
                        break;
                    }
                }
                if (!ok) {
                    break;
                }
            }
            if (ok) {
                return true;
            }
        }
    }
    return false; // 조건을 만족하는 매트릭스가 없으면 false 리턴
}

int solution(vector<int> mats, vector<vector<string>> park) {
    int answer = 0;
    for(int i : mats){
        if(isSizeok(i, park)){
            if(i > answer) answer = i;
        }
    }
    if(answer == 0) answer--;
    return answer;
}