Blog

ENGINEERING NOTE

[프로그래머스] 최소직사각형

프로그래머스 최소직사각형각 카드마다 짧은 쪽, 긴 쪽을 정한다.짧은 쪽들 중 가장 긴 것과 긴 쪽들 중 가장 긴 것을 찾는다.모든 명함(sizesi)에 대해 가로, 세로 중 더 큰 값을 가로로 보고, 더 작은 값을 세로로 본다.이후 각각 가로끼리, 세로끼리 최댓값을 갱

코딩테스트

문제 링크

프로그래머스 최소직사각형

접근 방법

  • 각 카드마다 짧은 쪽, 긴 쪽을 정한다.
  • 짧은 쪽들 중 가장 긴 것과 긴 쪽들 중 가장 긴 것을 찾는다.

풀이 코드

text
#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> sizes) {
    int answer = 0;

    int width = 0, height = 0; 

	// 너비와 높이를 구하기 위해 각 카드의 가로 세로를 비교하여 최대값을 찾는다.
    for (int i = 0; i < sizes.size(); ++i) {
		width = max(width, max(sizes[i][0], sizes[i][1])); // 가로 최대값
		height = max(height, min(sizes[i][0], sizes[i][1])); // 세로 최대값
    }

    answer = width * height;

    return answer;
}

해설

text
// 너비와 높이를 구하기 위해 각 카드의 가로 세로를 비교하여 최대값을 찾는다.
    for (int i = 0; i < sizes.size(); ++i) {
		width = max(width, max(sizes[i][0], sizes[i][1])); // 가로 최대값
		height = max(height, min(sizes[i][0], sizes[i][1])); // 세로 최대값
    }

모든 명함(sizes[i])에 대해 가로, 세로 중 더 큰 값을 가로로 보고, 더 작은 값을 세로로 본다.

이후 각각 가로끼리, 세로끼리 최댓값을 갱신한다.

명함을 회전할 수 있기 때문에, 항상 긴 쪽을 가로로, 짧은 쪽을 세로로 정렬하는 셈이다.