티스토리 뷰

알고리즘/C++

[C++] 프로그래머스 카펫

지휘리릭 2020. 3. 8. 13:17
#include <string>
#include <vector>

using namespace std;

vector<int> solution(int brown, int red) {
    vector<int> answer;
    int i, red_garo, red_sero;
    
    for(i = 1;i <= red; i++){
        if(red % i==0 && red/i >= i){
            red_garo = red/i; 
            red_sero = i;
            
            if( (red_garo+2)*(red_sero+2) - red == brown ){
                answer.push_back(red_garo+2);
                answer.push_back(red_sero+2);
                break;
            }
        }
    }
    return answer;
}

 

해결 방식 

 

가로가 세로와 같거나 더 크다는 것, 갈색 카펫은 한 줄만 있다는 것이 조건이다.

그 말은 즉 (레드의 세로길이 + 2 ) * ( 레드의 가로길이 +2 ) 의 값이 전체 사각형의 넓이가 되고 전체 넓이에서 레드 값을 빼면 브라운 값이 된다.

brown brown brown brown brown
brown red red red brown
brown red red red brown
brown brown brown brown brown

일단 레드 카펫이 어떤 사각형 크기로 되어있는지 확인하기 위해 레드의 약수를 확인했다. 

가로길이가 세로보다 크거나 같고, (레드가로+2) * (레드세로+2) - 레드 == 브라운 을 만족하는 것이 정답이다.

댓글