본문 바로가기

코딩테스트 연습(with java)/프로그래머스

프로그래머스<최소직사각형> -해결완료

문제 카테고리가 완전탐색이기에 완전탐색법을 쓸까 고민하였는데, 재귀라던지 마땅한 방법이 생각나지도 않을 뿐더러, 적용하는 것보다 더 좋은 방법이 생각나서 다른방법을 사용하였다. 

가장 큰 숫자와, 짝 지어진 두 개의 수들 중 작은 숫자들 중에서 가장 큰 숫자를 뽑는 것을 해결책이라고 생각하였다.

결과는 100점

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

class Solution {
    public int solution(int[][] sizes) {
        int answer = 0;
        int[] answerarr = new int[2];
        int max=0;
        for(int i=0; i<sizes.length; i++){
            for(int j=0; j<sizes[0].length; j++){
                if(sizes[i][j]>max){
                    max = sizes[i][j];  
                }
            }
        }
//         2차원배열에서 두 개 중 하나 큰 숫자는 사용X > MAX값이 커버 가능하니깐 
//         ex1) 50, 30, 30, 40남음 거기서 가장 큰 걸 사용 > 50
//         ex2) 7, 3, 8, 7, 5  > 8
//         ex3) 4, 6, 6, 7, 7 > 7사용 
//         모든 예시가 맞는다. 
        
        //60 50 arr[0][0] arr[0][1]
        //30 70 arr[1][0] arr[1][1]
        //60 30 arr[2][0] arr[2][1]
        //80 40 arr[3][0] arr[3][1]
        ArrayList<Integer> list = new ArrayList<Integer>();
        for(int i = 0; i<sizes.length; i++){
            for(int j=0; j<1; j++){ 
                if(sizes[i][j]>sizes[i][j+1]){
                    
                    list.add(sizes[i][j+1]);
                }
                else{
                    list.add(sizes[i][j]);
                }
            }
        }
        //ArrayList안에 50 30 30 40들어가있음 
        int sm = Collections.max(list);
        answer = max*sm;
        
        
        return answer;
    }
}