문제
풀이
#include <string>
#include <vector>
#include <cmath>
using namespace std;
vector<int> solution(int brown, int yellow) {
vector<int> answer;
vector<int> b;
for(int i=1; i<=sqrt(yellow); i++){
if(yellow%i == 0) b.push_back(i);
}
for(int i=0; i<b.size(); i++){
int h = yellow/b[i];
int w = b[i];
if((h*2) + (w*2) + 4 == brown){
answer.push_back(h+2);
answer.push_back(w+2);
break;
}
}
return answer;
}
노란면의 높이 * 2 + 노안면의 너비 * 2 + 4 = 갈색 부분의 면적을 활용하기 위해
노란면의 약수를 구해 벡터 배열에 넣은 후, 완전 탐색해 주었다.
다른 사람 풀이
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int brown, int yellow) {
int len = brown / 2 + 2;
int w = len - 3;
int h = 3;
while(w >= h){
if(w * h == (brown + yellow)) break;
w--;
h++;
}
return vector<int>{w, h};
}
w * h = brown + yellow, (w-2) * (h-2) = yellow
-> w = brown/2 + 2 - h
-> w + h = brown/2 + 2
h를 3으로 세팅한 이유는 h가 3 이상일 때 노란 면적이 나오기 때문이다.
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스] 완전탐색 - 전력망을 둘로 나누기 (0) | 2022.11.12 |
---|---|
[프로그래머스] 완전탐색 - 모음사전 / 중복순열 (0) | 2022.11.12 |
[프로그래머스] 정렬 - H-Index / greater<>() (0) | 2022.10.22 |
[프로그래머스]스택 큐 - 다리를 지나는 트럭 (0) | 2022.10.22 |
[프로그래머스] n^2 배열 자르기 (0) | 2022.10.09 |