본문 바로가기

Algorithm/Programers - C++

[프로그래머스] 완전탐색 - 카펫

문제

 

풀이

#include <string>
#include <vector>
#include <cmath>
using namespace std;

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    vector<int> b;

    for(int i=1; i<=sqrt(yellow); i++){
        if(yellow%i == 0) b.push_back(i);
    }
    
    for(int i=0; i<b.size(); i++){
        int h = yellow/b[i];
        int w = b[i];
        if((h*2) + (w*2) + 4 == brown){
            answer.push_back(h+2);
            answer.push_back(w+2);
            break;
        }
    }
    
    return answer;
}

노란면의 높이 * 2 + 노안면의 너비 * 2 + 4 = 갈색 부분의 면적을 활용하기 위해

노란면의 약수를 구해 벡터 배열에 넣은 후, 완전 탐색해 주었다.

 

 

 


다른 사람 풀이

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int brown, int yellow) {

    int len = brown / 2 + 2;

    int w = len - 3;
    int h = 3;

    while(w >= h){
        if(w * h == (brown + yellow)) break;

        w--;
        h++;
    }

    return vector<int>{w, h};
}
w * h = brown + yellow, (w-2) * (h-2) = yellow
-> w = brown/2 + 2 - h
-> w + h = brown/2 + 2 

h를 3으로 세팅한 이유는 h가 3 이상일 때 노란 면적이 나오기 때문이다.