안녕 세상아,

[c++/프로그래머스] LV 2 카펫 본문

프로그래머스

[c++/프로그래머스] LV 2 카펫

돈 많은 백수가 되고싶다 2023. 6. 27. 17:25

https://school.programmers.co.kr/learn/courses/30/lessons/42842

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

오랜만에 프로그래머스 !

 

우선 brown과 yellow를 더해서 총 몇개의 격자가 있는지 구한다(sum). 그 후 weight와 height의 변수를 선언한 후 sum에 height를 나눠준다. 이때 height의 최소 값은 3이다. yellow가 내부에 최소 한줄이 있고, brown이 yellow를 둘러싸게 되면 최소 두줄이 되기 때문이다(1+2). 

 

sum을 height로 나눈 나머지가 0이라면 새로운 if문으로 들어간다. 내부에 있는 yellow 격자의 총 넓이는 위에서 구한 weight와 height에서 각각 2를 뺀 수를 곱해주면 된다. 만약 이 값이 주어진 yellow값고ㅏ 같으면 break해주고 answer 벡터에 넣어주면 된다. 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    int sum = brown + yellow;

    for (int height = 3;; height++) {
        if (sum % height == 0) {
            int weight = sum / height;

            if ((height - 2) * (weight - 2) == yellow) {
                answer.push_back(weight);
                answer.push_back(height);
                break;
            }
        }
    }

    return answer;
}