⌨️ 프로그래머스/코딩테스트 입문

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

하나둘세현 2024. 8. 13. 03:39
728x90

문제

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

해결 과정

function solution(sides) {
  let organizeArray = sides.sort();
  for (let i = 0; i < organizeArray.length; i++) {
    if (organizeArray[0] + organizeArray[1] < organizeArray[2]) {
      return 2;
    } else if (organizeArray[0] + organizeArray[1] > organizeArray[2]) {
      return 1;
    }
    return 2;
  }
}

 

오름차순이라는 힌트를 알기전까지 문제가 안풀려 좌절하고 있었다.

구글링을 하기전 질문하기를 통해 오름차순의 힌트를 얻을 수 있었다. 

하하하하 🫨

리펙토링

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

 

삼항조건 연산자로 보다 심플하게 문제를 해결할 수 있었다.

 

🤔 문득 내가 작성한 sort()정렬과 리펙토링에서 사용한 sort()정렬의 차이점이 궁금해졌다.

내가 작성한 코드의 방법은 배열 요소들이 문자로 간주되어 예기치 않은 정렬이 될 수 있는 문제점이 생긴다.

반면 리펙토링에서 사용한 sort()는 숫자 크기에 따라 정확히 오름차순으로 정렬된다.

 

즉! sort() 함수를 사용할 때는 sort((a-b) => a-b)로 사용해야한다! 

 

728x90