문제

programmers42842_1 programmers42842_2

노란 부분을 한 줄의 갈색 부분이 감싸는 무늬의 카펫이 있을 때, 노란색과 갈색 격자의 개수로부터 전체 카펫의 크기를 구하는 문제. 진짜 다 돌려보면 된다.

노란색 격자의 가로, 세로 크기를 각각 i, j라 하면 갈색 격자의 가로, 세로 크기는 각각 i+2, j+2이므로
노란색 격자의 개수는 i*j, 갈색 격자의 개수는 전체 크기에선 노란색 부분의 크기를 뺀 (i+2)*(j+2)-(i*j) == 2*(i+j+2)이다.
노란색 격자의 수가 2*10^6 이하이기 때문에 for문이 도는 범위는 sqrt(2,000,000)보다 조금 큰 2100으로 잡았다.

#include <string>
#include <vector>
using namespace std;

vector<int> solution(int brown, int yellow) {
	vector<int> answer; // {width, height}
	int i, j;

	for (i = 1; i <= 2100; i++) {
		for (j = 1; j <= i; j++) {
			if (2 * (i + j + 2) == brown && i*j == yellow) {
				answer.push_back(i + 2);
				answer.push_back(j + 2);
				return answer;
			}
		}
	}
	return answer;
}