반응형
package Programmers; import java.util.ArrayList; import java.util.Comparator; import java.util.List; public class 최소직사각형 { public static void main(String[] args){ 최소직사각형 T = new 최소직사각형(); int[][] sizes = {{60, 50}, {30, 70}, {60, 30}, {80, 40}}; T.solution(sizes); } public int solution(int[][] sizes) { int answer = 0; int maxSize = 0; //명함의 크기중 가로세로중 작은것의 크기를 담을 집합 List<Integer> arrMin = new ArrayList<>(); for (int[] tempI: sizes) { //명함을 돌면서 가로세로중 큰수를 maxSize에 담는다. maxSize = Math.max(maxSize, Math.max(tempI[0], tempI[1])); //작을수들을 arrMin 배열에 담는다. arrMin.add(Math.min(tempI[0], tempI[1])); } //작은수를 담을 배열을 역정렬해준다. arrMin.sort(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2-o1; } }); //가장큰 크기와 가로세로중 작은크기를 담은 집합중에서의 가장 큰수를 곱해준다. answer = maxSize * arrMin.get(0); return answer; } }
1. 풀이
1.1 ) 가로세로 길이중 가장 큰수와 가로세로중 작은수들의 집합중 가장큰수의 곱을 해주면 답을 찾을수있음
1.2 ) 명함을 돌면서 가장큰수를 maxSize에 담아준다.
1.3 ) 명함을 돌면서 가로세로중 작은수를 arrMin 에 담아준다.
1.4 ) arrMin 역정렬 내림차순으로 정렬해준다.
1.5 ) maxSize * arrMin의 0번 인덱스(가장큰수) 를 곱해준다.
※ 지금보니 arrMin굳이 구할필요없이 변수 선언하나 해서 최대값 바로 구해주는게 더 좋을것같다.
2. 리팩토링
package Programmers; import java.util.ArrayList; import java.util.List; public class 최소직사각형 { public static void main(String[] args){ 최소직사각형 T = new 최소직사각형(); int[][] sizes = {{60, 50}, {30, 70}, {60, 30}, {80, 40}}; T.solution(sizes); } public int solution(int[][] sizes) { int answer = 0; int maxSize = 0; int subMax = 0; //명함의 크기중 가로세로중 작은것의 크기를 담을 집합 List<Integer> arrMin = new ArrayList<>(); for (int[] tempI: sizes) { //명함을 돌면서 가로세로중 큰수를 maxSize에 담는다. maxSize = Math.max(maxSize, Math.max(tempI[0], tempI[1])); subMax = Math.max(subMax, Math.min(tempI[0], tempI[1])); } answer = maxSize * subMax; return answer; } }
반응형
'기타 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 쿼드 압축 후 개수세기 LV02 Java (0) | 2023.06.26 |
---|---|
[알고리즘] 프로그래머스 - 약수의개수와덧셈 Lv1 Java (0) | 2023.06.08 |
[알고리즘] 프로그래머스 - 모음사전 Lv2 Java DFS (0) | 2023.05.27 |
[알고리즘] 프로그래머스 - 전력망을 둘로 나누기 Lv2 Java BFS (0) | 2023.05.25 |
[알고리즘] 프로그래머스 - 나머지가 1이 되는 수 찾기 Lv1 Java (0) | 2023.05.25 |