-
[프로그래머스] 완전 탐색 - 카펫 c++Coding Test/programmers 2022. 5. 17. 17:38728x90
입출력 예)
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'Coding Test > programmers' 카테고리의 다른 글
[프로그래머스] 같은 숫자는 싫어 c++ (0) 2022.08.01 [프로그래머스] 폰켓몬 c++ (0) 2022.08.01 [프로그래머스] 가장 먼 노드 c++ (0) 2021.11.03 [프로그래머스] 가장 큰 수 c++ (0) 2021.10.06 [프로그래머스] H-Index c++ (0) 2021.10.06