본문 바로가기
알고리즘 테스트/프로그래머스

각도기 [JS]

by 괴코딩 2023. 5. 26.

문제 설명

각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.
 
  • 예각 : 0 < angle < 90
  • 직각 : angle = 90
  • 둔각 : 90 < angle < 180
  • 평각 : angle = 180


제한사항

  • 0 < angle ≤ 180
  • angle은 정수입니다.

 

 입출력 예

angle result
70 1
91 3
180 4

 

입출력 예 설명

입출력 예 #1

  • angle이 70이므로 예각입니다. 따라서 1을 return합니다.

입출력 예 #2

  • angle이 91이므로 둔각입니다. 따라서 3을 return합니다.

입출력 예 #2

  • angle이 180이므로 평각입니다. 따라서 4를 return합니다.

단순 연산만 하다가

갑자기 이렇게 난이도가 뛰어버린다구....?

 

반환 해야하는 값의 종류가 4가지 였기 때문에

if-else if-else문을 이용했다.

 

    if(0< angle < 90) return 1;
    else if(angle = 90) return 2;
    else if(90 < angle < 180) return 3;
    else return 4;

 

처음에는 이런식으로 범위만 지정해서 입력했더니

return값이 1만 나오는 문제가 발생했다.
왜지? 잘못 쓴게 없는 것 같은데 왜 적용이 안되는지 이해가 되지 않아서 검색해 봤더니

 

if문에서 두가지 이상의 조건을 만족시키려면 논리연산자를 사용해야 한다는 것이다!

 

즉, 여기서 예를 든다면 

0 < angle < 90 앵글이 예각, 1의 값을 반환하기 위해서는

'0 < angle' 와 'angle < 90' 두 개의 조건 모두를 만족시킨다는 전제를 자바스크립트로 표현해줘야 한다는 소리!

 

if(0 < angle && angle < 90) return 1

 

이렇게 표현해 줄 수 있다.

 

또한,

'angle = 90' 이라고만 표현한다면 직각 이상의 앵글에서 무조건 2만 반환되는 문제를 만나게 된다.이는 'angle == 90' 동등 연산자를 사용해주어야 하는데 '='과 '=='가 무슨 차이가 있는지 몰라서 왜? 굳이? 라는 의문이 들어 구글링 해보았다.

 

= : 대입 연산자. 말 그대로 값을 넣을 때 사용

var a = 1;
let b = 3;
const c = '5';

 

== : 동등(coercive) 연산자. 값을 비교한다.

var a = 3;
var b = '3';
let c = 3;
a == b// true
a == c// true
b == c// true

 

=== : 일치(strict) 연산자

var a = 3;
var b = '3';
let c = 3;
a === b// false
a === c// true
b === c// false

 

그러니까.. 이런 얘기인건가?

'if (angle=90)' 을 말로 풀면 '만약 앵글이 90이면~'

'if (angle==90)' 을 말로 풀면 '만약 앵글이 90과 일치하면~'

 

....뭐가 다르지!

아무튼 자바스크립트는 섬세한 아이구나... 적어도 동등연산자는 써줘야 한댄다..

 

function solution(angle) {
    
    if(0< angle && angle < 90) return 1;
    else if(angle == 90) return 2;
    else if(90 < angle && angle < 180) return 3;
    else return 4;
    
}

우당탕탕 해결!

반응형

'알고리즘 테스트 > 프로그래머스' 카테고리의 다른 글

문자열 내 p와 y의 개수 [JS]  (0) 2023.05.26
짝수의 합 [JS]  (0) 2023.05.26
나이 출력 [JS]  (0) 2023.05.26
두 수의 나눗셈 [JS]  (0) 2023.05.26
두 수의 합 [JS]  (0) 2023.05.26