[PS] 카펫

강건우·2026년 10월 1일

[programmers]

목록 보기
10/14

문제

해결

가로를 col, 세로를 row라고 하면 결국 row col = brown + yellow 인 점을 알 수 있고.
brown = row
2 + col 2 - 4 라는걸 알 수 있다. (brown 블록이 가장자리만 차지하고 있기 때문에
따라서 yellow = row
col - row 2 - col 2
이 둘을 전개해서 row와 col을 brown, yellow에 대한 식으로 표현하는 방법도 있지만, 단순하게 3부터 sum까지 순회하면서 조건을 만족하는 row, col을 찾는 식을 작성했다.

3부터 시작하는 이유는 1, 2면 yellow 블록이 들어갈 자리가 없기 때문이다(가장자리는 무조건 brown 이어야 하기 때문에)

코드

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    int sum = brown + yellow;
    int col = sum;
    for(int i = 3; i < col; ++i) //최대 2'005'000회 수행
    {
        if(sum%i != 0) continue;
        col = sum / i;
        int side_ = i * 2 + col * 2 - 4;
        if(side_ ==  brown)
        {
            answer.push_back(col);
            answer.push_back(i);
            return answer;
        }
    }
}
profile
잠시 숨을 고르는 청년

0개의 댓글