본문 바로가기

문제 해결 알고리즘 기초/완전 탐색

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

※ 웹 환경에 최적화된 서식이므로 웹 페이지로 열람함을 권장. 

 

카펫(링크)

풀이

(갈색 격자 + 노랑 격자 = 총 격자 개수) 이므로 가능한 가로 격자, 세로 격자의 개수들을 알 수 있다. 여기에 ((가로 격자 - 2) * (세로 격자 - 2) = 노랑 격자) 라는 사실을 추가하면 정답이 되는 가로, 세로 격자의 개수를 알 수 있다.

C++ 코드

#include <iostream>
#include <vector>
using namespace std;

vector<int> solution(int brown, int yellow) {
    int check, total = brown + yellow;
    vector<int> ans(2);

    for (int h = 3; h <= total / 2; ++h) {
        if (total % h != 0) continue;
        int w = total / h;
        if ((check = (w - 2) * (h - 2)) == yellow) {
            ans[0] = w; ans[1] = h;
            return ans;
        }
    }
    return ans;
}

int main(int argc, char* argv[]) {
    if (argc < 3) { cout << "ERROR" << endl; return -1;}

    vector<int> answers = solution(stoi(argv[1]), stoi(argv[2]));
    cout << answers[0] << " " << answers[1] << endl;

    return 0;
}​