[알고리즘] 삼각형 판별하기

soheeoott·2021년 4월 29일
0

알고리즘

목록 보기
2/9
post-thumbnail

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

📐 삼각형이 만들어지는 원리

선이 가장 긴 길이보다 짧은 두 길이의 합이 커야 삼각형이 만들어진다.

  1. 가장 긴 선의 길이를 구한다.
  2. 세 길이를 모두 더한 총합의 값과 가장 긴 길이의 값을 뺀 후
    가장 긴 길이의 값이 더 큰지 비교해서 크다면 NO, 작다면 YES 를 출력

조건문 if

function solution(a, b, c){
  let long = Math.max(a, b, c);
  let total = a + b + c;
  let oper = total - long;
  if(oper > long){
    return "YES";
  } else {
    return "NO";
  }
}
console.log(solution(5, 33, 36));
console.log(solution(1, 32, 39));

📖 문제 풀이 과정

Math.max 내장 객체로 세 변의 길이 중
가장 긴 길이의 값을 long 변수에 담는다.

세 길이를 모두 더한 값을 total 변수에 담고,
모두 더한 값과 가장 긴 길이의 값을 빼면
나머지 두 길이의 값을 oper 변수에 담는다.

그럼 이 나머지 두 길이의 값이 들어있는 oper 변수와
가장 긴 길이의 값인 long 변수를 비교해서

if(oper > long)
두 길이의 값이 가장 긴 길이보다 길다면, YES 가 출력되고,
가장 긴 길이의 값이 더 길다면, NO 가 출력된다.

조건문을 삼항 연산자로

function solution(a, b, c){
  let long = Math.max(a, b, c);
  let total = a + b + c;
  let oper = total - long;
  return (oper > long ? "YES" : "NO");
}
console.log(solution(5, 33, 36));
console.log(solution(1, 32, 39));

📖 문제 풀이 과정

(조건 ? 참 : 거짓)
if 조건문을 삼항 연산자로 바꿔 작성하면 코드가 간결해진다.

return (oper > long ? "YES" : "NO");
oper > long
위 조건 식이 참이라면 "YES" 로 함수의 결과값이 반환되고,
위 조건 식이 거짓이라면 "NO" 로 함수의 결과값이 반환된다.

가장 긴 변의 길이를 삼항 연산자로

function solution(a, b, c){
  let long, total = a + b + c;
  long = (a < b ? b : a);
  long = (long < c ? c : long);

  let oper = total - long;
  return (oper > long ? "YES" : "NO");
}
console.log(solution(5, 33, 36));
console.log(solution(1, 32, 39));

📖 문제 풀이 과정

가장 긴 변의 길이를 구하기 위해서는
a 와 b 를 비교, a 와 c 를 비교, b 와 c 를 비교해야 하는데,
삼항 연산자를 사용하여 코드의 가독성을 높일 수 있다.

long = (a < b ? b : a);

a 의 값보다 b 의 값이 긴 경우 가장 긴 변의 변수 long에 b 의 값이 담기고,
a 의 값이 길다면 변수 long 에 a 의 값이 담긴다.

long = (long < c ? c : long);

위 과정에서 가장 긴 변의 변수가 a 또는 b 의 값이 들어있다면,
c 의 값과 비교하여
c 의 값이 더 길다면 변수 long 에 c 의 값을 담고,
long 변수에 들어있는 변수의 길이가 더 길다면
원래의 long 변수 값을 담는다.

long = (long < c ? c) // syntax error 

삼항 연산자의 값이 거짓(false)인 경우
본래 long 변수의 값과 같기 때문에 이를 생략하려고
true 의 값만 적는다면 문법에러가 발생한다.

profile
📚 글쓰는 습관 들이기 📚

0개의 댓글