jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 깃 이전 커밋에서 새 브랜치 만들기
  • 자바스크립트 배열의 특수함
  • 억억단을 외우자 javascript
  • 자바스크립트 sort는 왜 그모양일까
  • 계수정렬 자바스크립트
  • 프로그래머스 숫자카드나누기 javascript
  • 퀵정렬 자바스크립트
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 백준 17406 nodeJS
  • safari Date format NaN
  • safari invalid date error
  • 외벽 점검 javascript
  • 대충만든자판 javascript
  • 1753 최단경로 javascript
  • 자바스크립트 채팅방 스크롤
  • 리액트 프로젝트 디버깅하기
  • 25632 소수 부르기 게임
  • 자바스크립트 모듈 시스템
  • 리코쳇 로봇 javascript
  • javascript use strict
  • 백준 자바스크립트 입력 템플릿
  • 병합정렬 자바스크립트
  • JavaScript
  • 자바스크립트 이벤트 위임
  • 자바스크립트 커링
  • 13460 javascript nodejs
  • fetch 취소하기
  • 가사 검색 자바스크립트
  • 덧칠하기 javascript
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae

Go devlog

DS & Algorithm/basic

[기초 알고리즘] 삼각형 판별하기 - 자바스크립트

2021. 4. 7. 15:27

문제

길이가 서로 다른 a, b, c 막대가 주어지면, 이 세 막대로 삼각형을 만들 수 있으면 "YES"를 출력, 만들 수 없으면 "NO"를 출력한다.
(정렬을 사용하지 않고 실행해야한다.)

나의 풀이

function solution(a, b, c) {
  let answer = "YES";
  let max = a;
  let min1;
  let min2;

  if (max < b) {
    [max, min1] = [b, max];
  } else {
    min1 = b;
  }
  if (max < c) {
    [max, min2] = [c, max];
  } else {
    min2 = c;
  }

  if (max < min1 + min2) answer = "NO";
  return answer;
}
console.log(solution(6, 7, 11));
console.log(solution(13, 33, 17));
 

기본지식

삼각형이 성립하려면 ?

  • 삼각형의 가장 긴 변의 길이가, 나머지 두 변의 길이의 합보다 작아야 한다.

문제 원인

  • 정렬 없이 어떻게 해야 할지에 대해 초점을 두다 보니, max값을 제외한 나머지 두 값을 알아야 한다고 생각했다.
    • 그 결과, min1, min2라는 새로운 변수를 추가시켰고 결국 상황에 따른 많은 if문들이 이어질 수 밖에 없었다.

 

해결 방안

  1. 가장 큰 값과, 나머지 두 값의 합을 비교해야 한다.
    • a, b, c를 합하고 가장 큰 값을 빼주면, 나머지 두 값의 합이 되므로 이와 비교해주면 된다.

새로운 풀이

      function solution(a, b, c) {
        let answer = "YES";
        let max = a;
        let sum = a + b+ c;

        if (max < b) max = b;
        if (max < c) max = c;
        if (max > sum - max) answer = "NO";
        return answer;
      }
      console.log(solution(6, 7, 11));
      console.log(solution(13, 33, 17));
  • 다음과 같이 if문의 개수를 많이 줄일 수 있었다.

다르게 풀어보기

      function solution(a, b, c) {
        let max = a;

        if (max < b) max = b;
        if (max < c) max = c;

        return (max < a + b + c - max) ? "YES" : "NO";
      }
      console.log(solution(6, 7, 11));
      console.log(solution(13, 33, 17));
  • answer, sum 변수를 만들지 않았다.
  • return에서 삼항연산자를 사용하였다.

추가 이론) 삼항연산자

삼항 연산자는 세 개의 피연산자를 취할 수 있는 유일한 연산자로, 보통 if 명령문의 단축 형태로 쓰인다.

if (A) {
    B
} else{
    C
}



A ? B : C;
  • 다음과 같이 삼항연산자는 if,else문의 단축 형태로 쓰인다.
  • A 조건이 참이면 B를 실행하고, 거짓이면 C를 실행하므로 return을 줄 때 조건에 따라 다른 리턴을 주도록 할 수 있다.

'DS & Algorithm > basic' 카테고리의 다른 글

[기초 알고리즘] 멘토링 - 자바스크립트  (0) 2021.04.18
[기초 알고리즘] 가장 짧은 문자거리 - 자바스크립트  (0) 2021.04.16
[기초 알고리즘] 봉우리 - 자바스크립트  (0) 2021.04.08
[기초 알고리즘] 등수 구하기 - 자바스크립트  (0) 2021.04.08
[기초 알고리즘] 최솟값 구하기 - 자바스크립트  (0) 2021.04.07
    'DS & Algorithm/basic' 카테고리의 다른 글
    • [기초 알고리즘] 가장 짧은 문자거리 - 자바스크립트
    • [기초 알고리즘] 봉우리 - 자바스크립트
    • [기초 알고리즘] 등수 구하기 - 자바스크립트
    • [기초 알고리즘] 최솟값 구하기 - 자바스크립트
    jiho_bae
    jiho_bae
    하루에 한 걸음씩

    티스토리툴바