Programmers/Level 2

C++ / 프로그래머스 / 카펫

GitHubSeob 2022. 4. 23. 00:13
문제

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

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr

문제풀이

 

yellow의 약수를 구한다.

각각의 약수에 +2를 더하고 곱한 값이 전체 블록의 수가된다.

이 값이 brown + yellow의 값과 같아지면 된다.

 

가로가 세로 길이 이상이어야 하고, idx는 1부터 시작하므로 몫을 가로로 둔다.

약수를 구하면서 몫+2, 나눈 수+2의 곱이 총 격자의 수와 같으면 그게 가로, 세로의 길이다.

 

코드

 

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

vector<int> solution(int brown, int yellow) {
    int idx(0), idx2(0), quotient(0);
    for (idx = 1; idx * idx <= yellow; ++idx) {
        if (yellow % idx == 0) {
            quotient = yellow / idx;
            if ((quotient + 2) * (idx + 2) == brown + yellow) {
                return { quotient + 2, idx + 2 };
            }
        }
    }
}