프로그래머스 알고리즘/2단계
(프로그래머스 c++)카펫
naeunchan
2020. 5. 18. 10:54
728x90
반응형
완전 탐색으로 문제를 풀었다..!
우선 카펫의 총 격자수를 sum과 current에 저장하고,
while문으로 current > 1 일 때까지 반복하였다.
while문 내부)
우선 sum의 약수를 구해야 하기 때문에
sum % current == 0인 수만 찾도록 한다.
row는 나누려고 하는 수, col은 sum / current를 했을 때의 몫이다.
그러면 row * col == sum 이므로 약수가 된다.
약수를 구했다면 이제 brown과 yellow의 개수가 맞는지 확인해야 한다.
우선 col > 1이여야 한다. 왜냐하면 yellow의 개수를 구할 때 col - 2 를 해야하는데
음수가 나오면 안되기 때문이다.
그리고 문제에 나와있듯이 가로의 길이는 세로 길이와 같거나 길다고 하였기 때문에
row >= col 이여야 한다.
마지막으로 row * 2 < brown 인지 확인해야 한다.
만약 위 조건이 모두 true라면 yellow의 개수가 맞는지 확인하면 된다.
checkY = row * (col - 2) - (2 * (col - 2))를 계산하여 yellow와 같은지 확인한 후
같으면 answer에 넣어주고 리턴해주면 된다..!
간단하게 그림으로 나타내면 위와 같다..!
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(int brown, int yellow) {
vector<int> answer;
int current = brown + yellow;
int sum = current;
while(current > 1)
{
if(sum % current == 0)
{
int row = current;
int col = sum / current;
if(col > 1 && row >= col && row * 2 < brown)
{
int checkY = row * (col - 2) - (2 * (col - 2));
if(checkY == yellow)
{
answer.push_back(row);
answer.push_back(col);
return answer;
}
}
}
current--;
}
return answer;
}
728x90
반응형