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

Walter Mitty·2022년 10월 19일
0

Algorithm

목록 보기
15/29

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

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

삼각형의 세 변의 길이가 담긴 배열 sides 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.


제한사항
ides 원소는 자연수입니다.
ides 길이는 3입니다.
1 ≤ ides 원소 ≤ 1,000


입출력 예

sidesresult
[1, 2, 3]2
[3, 6, 2]2
[199, 72, 222]1

입출력 예 설명
입출력 예 #1

  • 가장 큰 변인 3이 나머지 두 변의 합 3과 같으므로 삼각형을 완성할 수 없습니다. 따라서 2를 return합니다.

입출력 예 #2

  • 가장 큰 변인 6이 나머지 두 변의 합 5보다 크므로 삼각형을 완성할 수 없습니다. 따라서 2를 return합니다.

입출력 예 #3

  • 가장 큰 변인 222가 나머지 두 변의 합 271보다 작으므로 삼각형을 완성할 수 있습니다. 따라서 1을 return합니다.

나의 풀이

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

처음에 출력된 배열 sidesArrays.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한테 물어봐야지...

2개의 댓글

comment-user-thumbnail
2022년 10월 19일

오!!! 이거 어제 제가 풀었던 문제
재미있지 않았나요??

1개의 답글