[프로그래머스 코딩테스트 연습문제] 삼각형의 완성조건 (2) 문제 풀이 with 자바스크립트(Javascript) & 자바(Java)

Re_Go·2024년 6월 26일
0

코딩테스트연습

목록 보기
81/106
post-thumbnail

1. 첫번째 문제 풀이(2024-06-26)

해당 문제는 세 가지 경우를 구해야 합니다. 하나는 주어진 두 변 중 가장 큰 변(max)을 찾는 것과, 가장 작은 변(min)을 찾는 것.

또 하나는 찾은 큰 값(max)이 나머지 작은 값과 구해야 할 값의 함(min + n)보다 작을 때 까지 n을 증가시키는 경우

마지막은 찾아야 할 값(n)이 긴 변일 때 나머지 max와 min의 합보다 작아야 하는 경우로 볼 수 있는데요. 예제를 예시로 들어 설명을 해보겠습니다.

★ [3,6] 이 주어졌을 때
6이 긴 변일때 : 6은 3+n의 합보다 작아야 함 -> 6 < 3+n = 4 5 6
n이 긴 변일때 n은 6+3의 합보다 작아야함 -> n < 9(6+3) = 7 8
합계 -> 5

★ [11,7] 이 주어졌을 때
11이 긴 변일때 11은 7+n의 합보다 작아야 함 -> 11 < 7+n = 5, 6, 7, 8, 9, 10, 11
n이 긴 변일때 n은 11+7의 합보다 작아야함 -> n < 18(11+7) = 12, 13, 14, 15, 16, 17
합게 -> 13

즉 정리하자면, 작은 가장 긴 변보다 작은 값과 찾아야 할 값을 합친 숫자가 가장 긴 변보다 큰 때부터 두 변을 더한 값 까지가 임의의 변에 포함될 수 있는 개수인 것이죠. 공식으로 하면 다음과 같은데요.

(max + min) - ((max - min) + 1) = result

그럼 해당 공식을 적용한 자바스크립트 버전을 소개해 드리겠습니다.

  1. 자바스크립트 버전
function solution(sides) {

    let sum = sides.reduce((acc, cur) => {
        return acc + cur
    })
    let min = Math.min(...sides)
    let max = Math.max(...sides)
 
    let result = 0;
    for(let i = 1 ; i < sum ; i++){
          if((i + min) > max){
               ++result;  
          }
    }
    return result
}

그리고 위에서 소개해 드린 공식으로 자바 코드를 짠다면 JS 버전보다 더 쉽게 코드를 구현할 수 있습니다.

  1. 자바 버전
import java.util.Arrays;

class Solution {
    public static int solution(int[] sides) {
        Arrays.sort(sides);
        int result = (sides[1] + sides[0]) - ((sides[1] - sides[0]) + 1);
        return result;
    }
}

2. 자바와 자바스크립트 풀이 차이점

  1. 자바에서 JS처럼 접근을 해야했다면 stream을 이용한 reduce로 합계를 구하는 방법, 마찬가지로 stream을 이용해 max나 min 메서드를 사용하거나 sort를 사용해 최대값 최소값을 구하는 방법을 사용해야 했을 것입니다.
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글