Q. 길이가 서로 다른 A, B, C 세 개의 막대 길이가 주어지면
이 세 막대로 삼각형을 만들 수 있 으면 “YES"를 출력하고,
만들 수 없으면 ”NO"를 출력한다.

좀 우습게도 삼각형의 성립조건을;; 알아야만 풀 수 있는 문제.
이과 > 공대 테크를 타긴 했지만 이런 기초적인건, 까먹기 일쑤다.

삼각형의 성립 조건

  • 두 변의 길이의 합이 나머지 한 변의 길이 보다 길어야 함
<!--my code-->
function solution(a, b, c){
	let arr = [a, b, c];
    arr.sort(function(a, b) {
    	return a - b;
    });
	let answer = (arr[0] + arr[1]) >= arr[2] ? "YES" : "NO";
	return answer;
}

<!--answer code-->
function solution(a, b, c){
	let answer="YES", max;
    let tot=a+b+c;
    if(a>b) max=a;
    else max=b;
    if(c>max) max=c;
    if(tot-max<=max) answer="NO"; 
    return answer;
}

원체 간결한 코드를 좋아하기도 하고 내장 메서드를 적극 사용하자는 주의라(...)
어느 코드가 더 좋다고는 말할 수 없는 것 같다.
단순 세 변의 길이를 구하는 문제라면 answer code가 더 좋은 것 같기도.
실제 코딩테스트에서는 어떻게 나올지 모르겠지만.

아무튼, 접근 방식은 3개의 변수가 주어졌을 때
가장 큰 값과 나머지 두 값의 합을 비교하는 부분.
그러면 세 개의 변수를 나열하여 배열의 가장 마지막 인덱스가
가장 큰 값이라고 간주하는 방식을 채택했다.

이때 sort()라는 javascript 내장 메서드를 사용하는데 주의가 필요하다.

** 참고 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

이 말인 즉슨 [5, 10, 1] 라는 정수로 이뤄진 배열이 있다면 sort()를 사용하는 경우
[ 1, 5, 10 ] 으로 정렬이 되는게 아니라
[ 1, 10, 5 ] 문자열의 유니코드 포인트대로 정렬이 된다.
단 sort 안에 정렬 순서를 정의하는 함수를 넣어주면, 그 규칙에 따라 정의가 된다.

// 숫자에 대한 정렬 규칙 정의
function compareNumbers(a, b) {
  return a - b;
}
array.sort(compareNumbers);

// example
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function (a, b) {
  return a - b;
});

아무튼, 정렬에 대한 간단한 메서드지만 특징을 잘 익혀야 하는 것 같다.

profile
고양이 집사 / INTP / 프론트엔드 개발자 / 기록 용..?

0개의 댓글