[アルゴリズム回答]プログラマーSweekleChallenge 8週間


ここ数日もアルゴリズムを緩めて、問題を解いても位置決めをしません.ははは积み重ねの问题がたくさんあったので明らかにしていません...今日から出直すならそのままPostingを始めましょう!
今日は月曜日なので、新しく出た第8週問を解答しました.ああ、この問題は前にもやったのに...Weekly Challengeの質問はどこから来たのか・・・この問題はまだ位置決めをしているようで、私はこっそり位置決め書を見たが、見つからなかったので、やり直した.いずれにしても、WEEKLYチャレンジでチェックを入れておけば、心が楽になる人が・・・簡単な質問だったのでIDEも書かずに3分カットしました

問題の説明


名刺入れを作っている会社は財布の大きさを確認したいです.様々な形や大きさの名刺を収納でき、コンパクトで持ち運びに便利な財布を作る必要があります.これらの要件を満たすために、設計チームはすべての名刺の横方向と縦方向の長さを調査した.
次の表に、4種類の名刺の水平と垂直の長さを示します.
名刺番号横長160502307030603048040
最も長い横長と縦長はそれぞれ80と70であるため、80(横)x 70(縦)サイズの財布を作成すると、すべての名刺を収容することができる.ただし、横に2番の名刺を収納する場合は、80(横)x 50(縦)サイズの財布ですべての名刺を収納できます.財布のサイズは4000(=80 x 50)です.
パラメータは、すべての名刺の水平と垂直の長さを表す2 D配列サイズです.すべての名刺を収納できる最小財布を作成する場合は、財布の大きさを返すための解関数を完了します.

せいげんじょうけん

  • サイズの長さは1,000より大きい.
  • sizeの要素は[w,h]形式です.
  • wは名刺の横長を表す.
  • hは名刺の縦の長さを表す.
  • wおよびhは1000より大きい自然数である.
  • I/O例


    sizesresult[[60, 50], [30, 70], [60, 30], [80, 40]]4000[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]]120[[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]]133

    解答方法


    名刺には横長、横長を決めてある.したがって,パラメータ入力の寸法では,各面の長さを比較することにより,長値と小値を別々に記憶する.次に横方向の値の最大値、縦方向の値の最大値を求め、2つの値を乗せればよい.
    君は簡単すぎて、説明することはない.

    コード#コード#

    import java.util.*;
    class Solution {
        public int solution(int[][] sizes) {
            int answer = 0;
            
            ArrayList<Integer> bigger = new ArrayList<>();
            ArrayList<Integer> smaller = new ArrayList<>();
            int big, small;
            for(int[] size : sizes){
                big = size[0];
                small = size[1];
                if(size[0] < size[1]){
                    small = size[0];
                    big = size[1];
                }
                bigger.add(big);
                smaller.add(small);
            }
            big = Collections.max(bigger);
            small = Collections.max(smaller);
            answer = big*small;
            
            return answer;
        }
    }