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

Doha Lee·2023년 4월 20일
0

알고리즘

목록 보기
1/1

문제 설명

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

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


제한사항

sides의 원소는 자연수입니다.
sides의 길이는 3입니다.
1 ≤ sides의 원소 ≤ 1,000


입력예시

const sides = [1, 2, 3]; // 2

const sides2 = [3, 6, 2]; // 2

const sides3 = [199, 72, 222]; // 2

나의 처음 풀이

function solution(sides) {
  var answer = 0;
  let max = Math.max(...sides); // 가장 큰 수 저장
  
  answer = sides.filter((el) => el < max).reduce((a, b) => a + b, 0);
    // 가장 큰 수 보다 작은 요소들 걸러서 더 해주기

  return answer > max ? 1 : 2; // 비교하기 
}

입력예시

아래의 입력값은 통과

const sides = [1, 2, 3];
solution(sides); // 2
const sides2 = [3, 6, 2];
solution(sides2); // 2
const sides3 = [199, 72, 222];
solution(sides3); // 1

반례

큰 수와 같은 수가 있을 경우 반례가 존재했다.
출력 값은 1이 나와야하지만 2가 나오는 상황.

const sides4 = [3,3,2];
solution(sides4); // 2

이유는 아래의 filter 에서 max보다 작은 값을 걸러 주었기 때문에, [3, 3, 2]의 경우 [2]만 반환 되었기 때문이다.

  answer = sides.filter((el) => el < max).reduce((a, b) => a + b, 0);

그래서 filter를 빼주기로 했다.


수정 풀이

function solution(sides) {
  var answer = 0;
  let max = Math.max(...sides); // 가장 큰 수 저장
  
  answer = sides.reduce((a, b) => a + b, 0);
    // sides 배열 다 더해주기 

  return (answer - max) > max ? 1 : 2; 
    // answer - max 값이 max보다 크다면 1, 작다면 2 
}

max 값은 저장해두고, 입력되는 배열의 모든 값을 reduce로 다 더해 answer로 반환, answer - max가 max 보다 크다면 1, 작다면 2를 출력한다.


프로그래머스 다른 풀이

function solution(sides) {
    sides = sides.sort((a,b) => a-b)
    return sides[0]+sides[1] > sides[2] ? 1 : 2;
}

더 간단하게 풀 수 있었다! 외워두기

0개의 댓글

관련 채용 정보