IT/프로그래머스

프로그래머스 삼각형의 완성조건 (1) - Java

짐99 2023. 6. 2. 17:49
반응형

 

 

문제 설명

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은조건을 만족해야 합니다.

- 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

삼각형의 세 변의 길이가 담긴 배열 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;
    }
}
반응형