[プログラマ]最小長方形
質問する
https://programmers.co.kr/learn/courses/30/lessons/86491
に答える
名刺の縦横最大サイズを求めればOKです.
しかし、横棒に変えて名刺を入れると、もっと小さな名刺を作ることも可能です.
そのため、以下のケースを確認する必要があります.
最初のインデックスは
コード#コード#
public int solution(int[][] sizes) {
int answer = 0;
int w = Integer.MIN_VALUE, h = Integer.MIN_VALUE;
for (int i = 0; i < sizes.length; i++) {
// 첫번째 인덱스는 그냥 넣어준다.
if (i == 0) {
w = sizes[i][0];
h = sizes[i][1];
} else {
// w와 현재 가로값의 차이의 절대값, h와 현재 세로값의 차이의 절대값의 합
int abs = Math.abs(w - sizes[i][0]) + Math.abs(h - sizes[i][1]);
// w와 현재 세로값의 차이의 절대값, h와 현재 가로값의 차이의 절대값의 합
int abs_reverse = Math.abs(w - sizes[i][1]) + Math.abs(h - sizes[i][0]);
// 위 두개 값 중에서 기존 절대값 합이 더 작으면 기존대로 가로, 세로의 최대값을 구해준다.
if (abs < abs_reverse) {
w = Math.max(w, sizes[i][0]);
h = Math.max(h, sizes[i][1]);
} else {
// 그게 아니라면 가로, 세로값을 바꿔서 가로, 세로의 최대값을 구해준다.
w = Math.max(w, sizes[i][1]);
h = Math.max(h, sizes[i][0]);
}
}
}
answer = w * h;
return answer;
}
Reference
この問題について([プログラマ]最小長方形), 我々は、より多くの情報をここで見つけました https://velog.io/@hwangduli515/프로그래머스-최소직사각형テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol