문제 풀이
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int brown, int red) {
vector<int> answer;
// 카펫의 전체 크기는 brown + yellow다.
int area = brown + yellow;
// yellow가 최소(1)일 때 area는 3 * 3의 크기를 가진다. 이는 width의 최솟값이 3이고, 최댓값이 area / 3이라는 것을 말한다.
// 가로가 세로보다 같거나 커야 하기 때문에 최댓값부터 내려가는 식으로 for문을 구현한다.
for (int width = area / 3; width >= 3; width--) {
// area가 가로 값으로 나누어 떨어지면
if (area % width == 0) {
// 그에 따른 세로 값을 구한 후
int height = area / width;
// yellow는 brown을 테두리로 가진 사각형이다. 상하좌우로 크기를 -1씩 줄인, 즉 (가로-2)*(세로-2)의 크기를 가진 사각형이다. 이를 만족한다면
if (yellow == (width - 2) * (height - 2)) {
// answer에 가로, 세로 순으로 값을 삽입 한 후 return.
answer.push_back(width);
answer.push_back(height);
return answer;
}
}
}
}
문제 링크
programmers.co.kr/learn/courses/30/lessons/42842?language=cpp
'C++ > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [C++] 오픈채팅방 (0) | 2021.05.16 |
---|---|
[프로그래머스] [C++] 소수 찾기 (0) | 2020.12.26 |
[프로그래머스] [C++] 모의고사 (0) | 2020.12.11 |
[프로그래머스] [C++] H-Index (0) | 2020.12.09 |
[프로그래머스] [C++] 가장 큰 수 (0) | 2020.12.07 |