본문 바로가기

개발/코딩테스트

[Javascript] 삼각형의 완성조건 (1)

처음 시도는 이렇게 했다.

function solution(sides) {
  var answer = 0;
  var max = 0;
  var result = 0;

  for (let i = 0; i < sides.length; i++) {
    for (let j = 0; j < sides.length; j++) {
      if (i !== j && sides[i] > sides[j]) {
        max = sides[i];
      }
    }
  }

  for (let i = 0; i < sides.length; i++) {
    if (max === sides[i]) {
      sides[i] = 0;
    }
  }

  for (let i = 0; i < sides.length; i++) {
    result += sides[i];
  }

  if (result > max) {
    answer = 2;
  } else {
    answer = 1;
  }

  return answer;
}

console.log(solution([199, 72, 222]));

 

최대한 배열의 기능을 쓰지 않고 구현해본건데 테스트 케이스 6번에서 실패했다. 블랙박스라 그 부분을 알 수 없었다.

뭔가 효율적이지도 않고 허점이 있었던 코드였던 것 같았다.

일단 sort() 기능을 사용해야겠다. 파이썬과 달리 자바스크립트는 sort() 사용법에 손이 조금 더 간다.

 

function solution(sides) {
  var answer = 0;

  sides.sort(function (a, b) {
    return b - a;
  });

  if (sides[0] < sides[1] + sides[2]) {
    answer = 1;
  } else {
    answer = 2;
  }

  return answer;
}

 

sort()를 그냥 사용하기 어렵고 내림차순으로 사용하기 위해선 위의 방법처럼 sort 안에 함수로 값들의 차이를 리턴하며 sort를 해야한다.

 

https://noirstar.tistory.com/359

 

[Javascript] sort() 동작 방식 (내부 알고리즘)

일단 sort 에 대해서 정확한 이해가 필요하다고 생각하여 글을 쓰게 되었음. 뭔가 정리를 안해놓으면 또 까먹을거같아서.. 찾아보다가 좋은 글이 있어서 퍼왔는데 이분이 설명을 잘해놓은듯함.

noirstar.tistory.com

자바스크립트 sort() 내부 알고리즘은 이렇다고 한다.