[프로그래머스] 공원



Programmers - [PCCE 기출문제] 공원




사용 언어 - C++

소요 시간 - 약 35분

정답 여부 - O




문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/340198



문제 요약

  1. 정사각형 크기의 돗자리가 여러개 주어짐
  2. 공원에는 여러 돗자리들이 깔려있음
  3. 비어있는 칸에 깔 수 있는 돗자리 중 가장 큰 돗자리의 한 변 return

빈칸 : ⭕
나머지 : 깔려있는 돗자리

🌟🌟⭕⭐⭐⭐⭐⭕
🌟🌟⭕⭐⭐⭐⭐⭕
⭕⭕⭕⭕⭕⭕⭕⭕
❤️❤️⭕⭕⭕⭕🌕⭕
❤️❤️⭕⭕⭕⭕⭕🌙
❤️❤️⭕⭕⭕⭕⭕🌙




최종 코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int CheckMat(vector<vector<string>> park, int InHeight, int InWidth, int InMat)
{
    for(int i = 0; i < InMat; i++)
    {
        for(int j = 0; j < InMat; j++)
        {
            bool bCheck = false;
            bCheck |= (InHeight + i >= park.size());
            bCheck |= (InWidth + j >= park[0].size());
            //bCheck |= (park[InHeight + i][InWidth + j] != "-1");
            
            if(bCheck || park[InHeight + i][InWidth + j] != "-1")
                return -1;
        }
    }
    
    return InMat;
}

int solution(vector<int> mats, vector<vector<string>> park) {
    int answer = -1;
    //가장 작은 돗자리부터 검사하기 위해
    sort(mats.begin(), mats.end());
    
    for(int i = 0; i < mats.size(); i++)
    {
        for(int j = 0; j < park.size(); j++)
        {
            for(int k = 0; k < park[0].size(); k++)
            {
                if(park[j][k] != "-1")
                    continue;
                
                //가장 큰 돗자리 크기 구하기
                answer = max(answer, CheckMat(park, j, k, mats[i]));
            }
        }
    }
    
    return answer;
}




트러블 슈팅

  1. X




문제 풀이 후 소감

  • 풀었던 1단계 문제 중에 가장 어려웠던 것 같다. 생각해야할 것도 많았고, for문을 3개 사용할 때부터 이게 맞나?라는 생각이 들었다.