프로그래머스 삼각형의 완성조건 (1) - Java
문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은조건을 만족해야 합니다.
- 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.
제한사항
sides의 원소는 자연수입니다.
sides의 길이는 3입니다.
1<=sides의 원소 <=1,000
입출력 예
1. [1, 2, 3] -> 2
2. [3, 6, 2] -> 2
3. [199, 72, 222] -> 1
풀이
배열 sides를 내림차 순으로 정렬한 후 가장 큰 수와 나머지 두 수의 합을 비교한다.
배열 내림차 순 정렬하기
arr = Arrays.stream(arr).boxed().sorted(Collections.reverseOrder()).mapToInt(Integer::intValue).toArray();
int형 배열에서 바로 오름차 순으로 만드는 것은 불가능하다.
그래서 Integer로 만들어주어야 한다.
int는 안되고 Integer는 되는 이유
-> sort 메소드를 보면 알 수 있다.
public static <T> void sort(T[] a, Comparator<? super T> c){
if(c==null){
sort(a);
}else{
if(LegacyMergeSort.userRequested)
legacyMargeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
매개변수로 받아오는 c를 보면 Comparator<? super T> T는 제네릭 클래스로 어떠한 객체도 받아오게 되어있는데, int는 primitive data type으로 허용이 되지 않는 것이다.
Arryas.stream(arr) -> 배열을 스트림으로 변환
boxed() -> 스트림의 요소를 다른 요소로 대체하는 작업 (int를 Integer로 바꾸기 위함)
sorted(Collections.reverseOrder()) -> 내림차순을 하기 위해선 java.util.Colections에서 제공해주는 Collections.reverseOrder()를 이용하면 된다.
stream().mapToInt(Integer::intValue).toArray() -> 다시 int형 어레이로 바꿔주기.
코드
import java.util.*;
class Solution {
public int solution(int[] sides) {
sides = Arrays.stream(sides).boxed().sorted(Collections.reverseOrder()).mapToInt(Integer::intValue).toArray();
if(sides[0] < (sides[1] + sides[2])) return 1;
return 2;
}
}