본문 바로가기

C++/프로그래머스

[프로그래머스] [C++] 카펫

문제 풀이

 

#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

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr