최댓값 만들기(1)
https://school.programmers.co.kr/learn/courses/30/lessons/120847
- 최댓값을 찾는 문제로 이를 해결하기 위해서는 주어진 배열에서 가장 큰 두 개의 수를 찾아 곱하면 된다.
문제 풀이
1 2 3 4 5 6 7 8 9
import java.util.Arrays; class Solution { public int solution(int[] numbers) { Arrays.sort(numbers); int length = numbers.length; return numbers[length - 1] * numbers[length - 2]; } }
- 배열을 정렬한 후에 마지막 두 수를 곱한다. 정렬로 인해 시간 복잡도가 조금 늘어나겠지만, 배열의 크기가 최대 100개이므로 큰 문제는 없을 것 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
class Solution { public int solution(int[] numbers) { int max1 = 0; int max2 = 0; for (int num : numbers) { if (num > max1) { max2 = max1; max1 = num; } else if (num > max2) { max2 = num; } } return max1 * max2; } }
- 반복문을 사용하여 최댓값을 찾고, 두 개의 최댓값을 곱해 최종 결과를 반환한다.
1 2 3 4 5 6 7 8 9 10 11
import java.util.Arrays; import java.util.Collections; class Solution { public int solution(int[] numbers) { Integer[] sorted = Arrays.stream(numbers).boxed().toArray(Integer[]::new); // Primitive Type을 Wrapper클래스로 박싱해주어야 reverseOrder() 사용 가능 Arrays.sort(sorted, Collections.reverseOrder()); return sorted[0] * sorted[1]; } }
reverseOrder()
를 사용하여 배열을 내림차순으로 정렬하고, 최댓값 두 개를 곱해서 결과를 반환한다.
int 배열의 정렬 - 내림차순
1 2 3 4 5 6 7 8 9 10 11 12
import java.util.*; public class Main { public static void main(String args[]) { int[] arr = {1, 4, 2, 5, 3}; Integer[] arr2 = {1, 3, 4, 2, 5}; Arrays.sort(arr, Collections.reverseOrder()); // error(Primitive Type을 Wrapper클래스로 박싱해주어야 reverseOrder() 사용 가능) Arrays.sort(arr2, Collections.reverseOrder()); for(int x : arr2) System.out.print(x + " "); // [5, 4, 3, 2, 1] } }
- Collections.reverseOrder() 함수를 사용
- Collections는 기본적으로 Object를 상속한 클래스에 대해서 사용 가능한 인터페이스이므로, String, Integer, Double 등과 같은 Object 타입에 배열은 sort에 Collections.reverseOrder() 사용이 가능하다.
기본타입인 int, double, char, float 등은 사용이 불가하므로 기본타입(Primitive Type)의 배열을 Object를 상속하는 Integer, String 같은 Wrapper 클래스로 박싱해주어야 역순정렬이 가능하다. - String은 Java 기본 타입이 아니므로 오류 발생하지 않음
1 2 3 4 5 6 7 8
[정리] - 배열 정렬은 Arrays.sort()를 이용한다. - 기본타입 정렬은 오름차순만 가능하다. - 1차원배열에 역순 정렬을 사용하기 위해서는 Collections.reverseOrder()를 사용한다. - Collections는 기본타입은 지원하지 않기 때문에, Wrapper로 박싱이 필요하다. - 2차원 배열부터는 Comparator (compare 메소드)를 구현 사용한다. - Comparator 사용시 Wrapper Class 비교정렬은 각 클래스마다 구현되어있는 compareTo 메소드를 이용한다. - 모든 Wrapper Class 에는 compareTo 메소드가 존재하므로, 잘 활용하자.
- Collections.reverseOrder() 함수를 사용
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.