728x90
https://programmers.co.kr/learn/courses/30/lessons/42842
출처 : 프로그래머스
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int brown, int yellow) {
vector<int> answer;
int carpet = brown + yellow;
//carpet의 약수 구하기 (n가로, m세로)
for (int m=3; m<carpet/2; m++){
if (carpet % m == 0){
int n = carpet / m;
//노란색 개수와 맞는지 확인
if((m-2)*(n-2) == yellow){
answer.push_back(n);
answer.push_back(m);
break;
}
}
}
return answer;
}
그림을 그리며 생각해보면 규칙을 찾을 수 있다.
테두리가 갈색이어야하고 가운데에 노란색이 있어야하니까 세로의 최소 길이는 3이다.
3이상부터 가로가 세로보다 같거나 길어야하니까 이 조건을 주의해서 약수를 찾는다.
찾은 약수 쌍 중, 만들 수 있는 노란색의 개수가 네오가 본 노란색의 개수와 같다면 answer에 가로, 세로 추가하고 break
아니면 다른 약수 찾는다.
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 네트워크 c++ (0) | 2022.03.18 |
---|---|
[프로그래머스] 타겟 넘버 c++ (0) | 2022.03.18 |
[프로그래머스] 소수 찾기 c++ (0) | 2022.03.17 |
[프로그래머스] 모의고사 c++ (0) | 2022.03.17 |
[프로그래머스] 우유와 요거트가 담긴 장바구니 mysql (*) (0) | 2022.02.11 |