PROGRAMMERS 프로그래머스 : 카펫
Updated:
시작하면서
이번 문제는 완전 탐색(Brute Force Search) 문제이다.
문제 이해
문제를 읽어보자. 먼저 이 문제에서 나오는 변수는 총 2가지이다.
- brown
- yellow
문제 아이디어
이 문제의 핵심은 대기목록의 최대 brown 개수가 5,000이고, yellow 개수가 2,000,000이다. 모든 경우의 수를 다 구해보아도 그 수가 충분히 작으므로 완전 탐색이 가능하다.
- 가로를 가장 길게, 세로를 가장 짧게 시작한다. (문제 조건이 가로가 세로보다 같거나 더 길다고 했다)
- 가로를 줄이고, 세로를 늘리면서 조건에 맞는 답을 찾는다.
해결
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int brown, int yellow)
{
vector<int> answer;
int horizontal, vertical, yellowCount;
// 1. 가로가 가장 긴 경우부터 시작한다.
horizontal = (brown - 2) / 2;
vertical = 3;
yellowCount = (horizontal - 2) * (vertical - 2);
// 2. 가로를 줄이고, 세로를 늘리면서 조건에 맞는 답을 찾는다.
while (yellowCount != yellow)
{
horizontal--;
vertical++;
yellowCount = (horizontal - 2) * (vertical - 2);
}
answer.push_back(horizontal);
answer.push_back(vertical);
return answer;
}
Leave a comment