Programers:カーペット(フルナビゲーション)


じゅうたん



コード#コード#

#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/黄色に関連する式を横/縦で検索する
    2)該当する組合せを検索する
    :yellow=(가로-2)*(세로-2)を満たす縦横組合せ
  • を探す