Algorithm

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

dokylee 2020. 8. 27. 03:26

 

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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

 

yellow가 어떤 가로와 세로 크기를 가지느냐에 따라 brown이 자동으로 정해지기 때문에

 

yellow가 가질 수 있는 모든 가로x세로 조합을 찾아준다

 

for문을 1부터 yellow/2까지 돌면서

 

yellow의 약수이면 그때의 가로(w) 세로(h)값을 정해주고 (단, 가로의 값은 항상 세로의 값보다 크거나 작다는 조건이 있다 if로 걸어주자)

 

그에 따라 정해지는 brown의 가로(w+2) 세로(h+2)가 주어진 brown의 개수(2*w + 2*h + 4)와 맞는지 체크하고

 

맞으면 answer에 집어넣고 리턴!

 

 

 

 

Code

#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    int w, h;
    
    if(yellow == 1 || yellow == 2 || yellow == 3) {
        h = 1;
        w = yellow;
        answer.push_back(w+2);
        answer.push_back(h+2);
    }
    
    else {
        for(int i=1; i<=yellow/2; i++) {
            if(yellow % i == 0) {
                if((yellow/i) > i) {
                    w = (yellow/i);
                    h = i;
                }
                else {
                    w = i;
                    h = (yellow/i);
                }
            }
        
            if((2*w + 2*h + 4) == brown) {
                answer.push_back(w+2);
                answer.push_back(h+2);
                break;
            }
        }
    }
    
    return answer;
}