Coding Test/programmers
[프로그래머스] 완전 탐색 - 카펫 c++
owls
2022. 5. 17. 17:38
728x90
입출력 예)
Brown | Yellow | return |
10 | 2 | [4, 3] |
8 | 1 | [3, 3] |
24 | 24 | [8, 6] |
Brown, Yellow를 매개변수로 입력 받았을 때 return값에 대한 규칙이 있다.
1) Brown + Yellow = x * y 식으로 표현할 수 있다.
2) Brown + Yellow 의 공약수를 중에
3) (x-2) * (y-2) == Yellow 를 만족하는 값이 return 값이다.
#include <string>
#include <vector>
#include <stack> //stack
#include <cmath> //sqrt : 제곱근을 구하는 함수
using namespace std;
vector<int> solution(int brown, int yellow) {
//brown + yellow = x * y
int sum = brown + yellow;
int num = sqrt(sum)+1; // ( sum / 2)를 사용 했을 경우 for문 검사수(index)가 증가하게 되어 속도를 높이기 위해
//제곱근을 사용.
stack<pair<int, int>> sCD;
for(int i = 1; i < num; i++)
{
if(sum % i == 0 )
{
int x = i;
int y = sum / i;
if( (x-2) * (y-2) == yellow) //처음에는 (y -x < 4 ) 라고 대략적인 조건을 걸었다.
sCD.push(make_pair(y , x)); //x와 y의 수 차이가 적은 값을 찾기 위해 조건을 고민해 보다가
//다른 사람의 풀이 중에 ( (x-2) * (y-2) == yellow) 식을 보게 되서 적용하였다.
}
}
vector<int> answer;
if(sCD.size() > 0)
{
answer.push_back(sCD.top().first);
answer.push_back(sCD.top().second);
}
return answer;
}
이 문제를 보고 먼저 2가지 식을 도출해내야 한다.
1) Brown + Yellow = x * y
2) (x-2) * (y-2) == yellow
728x90