Programers : 카펫 (완전탐색)

김정욱·2021년 1월 26일
0

Algorithm - 문제

목록 보기
68/249

카펫

코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    int sum = brown + yellow;
    vector<pair<int,int>> v;
    /* N*M=sum 이 되는 수 중에서, N >= M 인 조건을 만족하는 수를 저장 */
    for(int i=sum;i>=1;i--)
    {
        if(sum % i == 0 && i >= sum/i) v.push_back({i, sum/i});
    }
    /* "yellow=(가로-2)*(세로-2)" 를 만족시키는 가로, 세로 조합을 찾는다! */
    while(!v.empty())
    {
        auto cur = v.front();
        int width = cur.first-2;
        int height = cur.second-2;
        if(width * height == yellow){
          answer.push_back(cur.first);
          answer.push_back(cur.second);  
          break;
        }else{
            v.erase(v.begin());
        }
    }
    return answer;
}
  • keypoint!
    1) 가로 / 세로를 사용하여 주어진 brown / yellow와 관련된 식을 찾기
    2) 해당되는 조합을 찾기
    : yellow=(가로-2)*(세로-2) 를 만족시키는 가로, 세로 조합을 찾는 것
profile
Developer & PhotoGrapher

0개의 댓글