[JS] 각도기 programmers 노말노말 어려워 죽겠네

0

코딩테스트

목록 보기
11/80
post-thumbnail

🎀 문제

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

예각 : 0 < angle < 90 = 1
직각 : angle = 90 = 2
둔각 : 90 < angle < 180 = 3
평각 : angle = 180 = 4

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

🎀 내 답변

아래와 같이 답변했는데 역시 틀리고 말았따...

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

🎀 정답

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

0을 포함하면 안되는건가보다.
그리고 90 이상을 굳이 표시해주지 않아도 되는 것 같다.

🎀 더 나은 답변

📌 삼항 연산자의 활용

function solution(angle) {
    return angle < 90 ? 1 : angle === 90 ? 2 : angle < 180 ? 3 : 4;
}

삼항 연사자 활용은 이해가 쉽게 되었다.
다음 부터는 짱구를 좀 더 열심히 굴리고 답을 적어야지...

📌 filter의 뜻밖의 사용

function solution(angle) {
    return [0, 90, 91, 180].filter(x => angle>=x).length;
}

filter는 그저 놀랍다..
머리가 이렇게 좋을 수가 있나?
코딩도 재능의 영역이다 역시 ㅋㅋㅋ

🎀 filter란?

filter함수는 배열의 각 요소를 순회하며 callback함수를 실행하며 조건에 맞는 요소만을 갖는 배열을 반환합니다.
이게 뭔소린가 싶겠지만 예시를 보면 바로 이해 된다.

📌 배열 속 홀수만 뽑아낼 수 있다

const numbers = [1, 2, 3, 4, 5];

// numbers 속 요소(currentNumber)를 하나씩 돌면서 
// 2로 나눠줬을 때 나머지가 1인 경우 홀수가 된다.
const filter1 = numbers.filter(currentNumber => currentNumber % 2 === 1);

console.log(filter1);

그럼 console에 배열 속 홀수만 찍혀져 나오게 된다.

📌 위 정답 다시 해석 해 보자

그래서 아무튼 위에 filter를 이용한 방법을 다시 해석 해 보자.

function solution(angle) {
    return [0, 90, 91, 180].filter(x => angle>=x).length;
}

배열 속 숫자 하나 하나가 x 가 된다.
새로 들어온 angle이라는 숫자가 x 보다 같거나 크다면 새로운 배열에 저장한다.
그리고 그 새로운 배열의 length 값을 return 한다. (각 if 문에 따른 return 1 ~ 4 까지의 값을 확인해 보자.)

예를 들어 보겠다

// 만약 angle = 1 이라면
// 배열 속 0 만이 angle = 1 보다 작은 숫자니까
// length는 1이 된다.
// 그럼 문제에서 요구하는 예각 : 0 < angle < 90 = 1 에 부합한다.
[0, 90, 91, 180].filter(x => angle>=x).length = 1

설명하기도 이렇게 어려운데,
어떻게 저런 정답을 생각해 낼 수 있는건지?

profile
일단 해. 그리고 잘 되면 잘 된 거, 잘 못되면 그냥 해본 거!

0개의 댓글