최대 1 분 소요

Question

Q Q2


Solution

  • brown + yellow = 가로 * 세로, yellow = (가로 - 2) * (세로 - 2) 라는 이차방정식을 세울 수 있다.
  • 위 식을 이용하여 조건을 만족하는 가로와 세로를 찾으면 된다.

  • 추가: 이차방정식을 좀 더 잘 활용하면 이중for문이 아닌 한 개의 while문으로 해결 가능하다.

Cord

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int brown, int yellow) 
{
    vector<int> answer;
    
    // 최소 카펫의 크기는 3x3
    int min = 3;
    int sum = brown + yellow;
    
    // sum과 카펫의 크기가 같은 것 찾기 
    for (int row = min; row <= sum / min; row++)
    {
        for (int column = min; column <= row; column++)
        {
            if (sum == row * column && yellow == (row - 2) * (column - 2))
            {  
                answer.push_back(row); 
                answer.push_back(column);
                
                return answer;
            }
        }
    }
    
    return answer;
}

Result

Result