250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(프로그래머스 c++)카펫 본문
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
반응형
'프로그래머스 알고리즘 > 2단계' 카테고리의 다른 글
(프로그래머스 c++)올바른 괄호 (2) | 2020.05.19 |
---|---|
(프로그래머스 c++)타겟 넘버 (0) | 2020.05.18 |
(프로그래머스 c++)구명보트 (0) | 2020.05.15 |
(프로그래머스 c++)위장 (0) | 2020.05.15 |
(프로그래머스 c++)전화번호 목록 (0) | 2020.05.14 |