문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
삼각형의 세 변의 길이가 담긴 배열 sides
매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.
제한사항
ides
원소는 자연수입니다.
ides
길이는 3입니다.
1 ≤ ides
원소 ≤ 1,000
입출력 예
sides | result |
---|---|
[1, 2, 3] | 2 |
[3, 6, 2] | 2 |
[199, 72, 222] | 1 |
입출력 예 설명
입출력 예 #1
입출력 예 #2
입출력 예 #3
나의 풀이
import java.util.Arrays;
class Solution {
public int solution(int[] sides) {
Arrays.sort(sides);
return sides[2] < sides[0]+sides[1] ? 1 : 2;
}
}
//0.45ms
처음에 출력된 배열 sides
를 Arrays.sort()를 통해서 작은 수 → 큰 수 순서로 담기는 배열로 정렬을 하려고 했다.
(그러면 자연스럽게 맨 뒤에 제일 큰 수가 담길테니까!)
그리고 나서 가장 큰 변과 나머지 변의 합을 비교했는데, error: cannot find symbol 에러가 났다.
이유가 뭔지 한참 찾아보다가, 맨 윗줄에 import java.util.Arrays;
를 임포트 해주지 않아서라는 걸 깨달았다.
import java.util.*;
해도됨!
너무 오래걸려서 다른 답을 찾아봤다.
Better Solution
class Solution {
public int solution(int[] sides) {
int A = sides[0] + sides[1]; // sides[2]을 뺀 나머지 두변의 합
int B = sides[0] + sides[2]; // sides[1]을 뺀 나머지 두변의 합
int C = sides[1] + sides[2]; // sides[0]을 뺀 나머지 두변의 합
if(A <= sides[2] || B <= sides[1] || C <= sides[0]) { // 하나라도 참이면, 두변의 합이 더 작아지는 거므로, 삼각형 안됨! false = 2
return 2;
} else {
return 1;
}
}
}
답은... 두변의 합을 다 구해서 나머지 다른 한값과 비교해서 리턴값을 주는 거였다 ..ㅠㅠ...
내 답(0.45ms) → 더 나은 답 (0.02ms)
이유가 뭘까. 연산이 더 많아서 오래걸릴 줄 알았는데 왜 더 런타임이 빠른걸까...! 나중에 CJ한테 물어봐야지...
오!!! 이거 어제 제가 풀었던 문제
재미있지 않았나요??