💻JavaScript/코딩테스트

각도기(Create a protractor)

영진학생 2024. 12. 12. 15:34

문제 설명

 

각에서 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은 정수입니다.

 

 

📄 문제

function solution(angle) {
    var answer = 0;
    return answer;
}

 

 

💻 내가 쓴 코드

// 0초과 180 이하 값인 숫자를 입력할 때 
// 값에 따라 다른 return 값을 갖게한다.
// 조건문 if, else if, 그리고 else 를 사용하면 된다고 생각한다.

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

 

 

💻 공부 후 다시 쓴 코드

// 0초과 180 이하 값인 숫자를 입력할 때 
// 값에 따라 다른 return 값을 갖게한다.
// 조건문 if, else if, 그리고 else 를 사용하면 된다고 생각한다.

function solution(angle) {
        if (0 > angle || angle > 180) { // 음수값과 180보다 큰 값이 입력될때
            return "Invalid angle"; // "Invalid angle"를 반환하게 만듦
        }
        if (0 < angle && angle < 90 ) { // 두 가지 조건을 부여할 땐 &&연산자를 사용
            return 1;
        } else if (angle == 90) { // " = " 는 할당한다는 의미이다.
            return 2;
        } else if (90 < angle && angle < 180) { // &&연산자를 사용해 두가지 조건을 충족
            return 3;
        } else if (angle == 180) { // 마지막으로 angle값이 180 일때
            return 4; // 4를 반환한다.
        }
    }

 

 

📌 배운 점

사실 0 < angle < 90 이라는 조건을 적으면서 이게 될까? 라는 의문이 들었었는데 아니나 다를까 코드 에러가 발생했고 답은 논리 연산자에 있었네요. 제가 기존에 적은 방식은 자바스크립트에서 연산의 순서 때문에 의도와 다르게 평가가 되는데 예를 들어 0 < angle < 90은 실제로 (0 < angle)을 먼저 평가하고, 그 결과가 true (1)로 간주되면 컴퓨터는 1 < 90 이라고 받아들이게 된다는 걸 알수 있었어요. 즉, 논리 오류가 발생할 수 있다는 걸 간과했었네요. 그렇기 때문에 두 조건을 동시에 포함하는 경우에는 &&나 ||를 활용해 따로 비교 해 줄 필요가 있었습니다. 추가로 음수와 180초과 값이 입력 될때 경우를 생각해서 개선점으로 추가 조건부를 부여 해서 "Invalid angle" 문자열을 반환하게 만들었어요 :)

 

&&(AND) : 두 피연산자 모두 참일 때 true를 반환하고, 그게 아니라면 false를 반환

||(OR) : 인수 중 하나라도 참일 때 true를 반환하고, 그렇지 않으면 false를 반환

 

https://ko.javascript.info/logical-operators