:ledger: 문제 설명

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

  • 예각 : 0 < angle < 90
  • 직각 : angle = 90
  • 둔각 : 90 < angle < 180
  • 평각 : angle = 180

:one: 제한사항

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

:two: 입출력 예

num1 result
70 1
91 3
180 4

:three: 입출력 예 설명

:pushpin: 3-1) 입출력 예 설명 #1

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

:pushpin: 3-2) 입출력 예 설명 #2

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

:pushpin: 3-3) 입출력 예 설명 #3

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

:four: 프로그래머스에서 제공한 코드

처음 프로그래머스에서 작성된 코드는 아래와 같다.

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

:ledger: 문제 풀이


// 처음 적용
const solution = angle => {    
    if(angle > 0 && angle < 91) {
        return 1;    
    }else if(angle > 90 && angle < 180){
        return 3;
    }else if(angle == 180){
        return 4;
    }
}

// 결과
테스트 2 > 실패 (0.04ms, 33.6MB)

// 수정 후 성공 : if문 첫 번째 구절에서 angle < 91 을 90으로 변경 및 직각 추가
const solution = angle => {
    if (angle > 0 && angle < 90) return 1;
    else if(angle === 90) return 2;
    else if(angle < 180) return 3;
    else return 4;
}



:one: 함수 선언

  • 화살표 함수를 사용하여 angle 매개변수를 받는다.

:two: 풀이

  • 처음 입출력 예 설명에 맞춰 if문과 else if문으로 적용. 코드 실행에서는 정상적으로 적용되나 채점하기에서 실패 확인
  • 처음에 문제의 정확한 원인을 모르고 문법이 잘못된 건가 싶어서 삼항연산자로도 수정해보고 최대한 축약할 수 있는 방법으로 적용
  • 직각을 추가 후 문제가 해결되지 않자 다시 처음 작성한 코드를 확인.
  • 문제 설명에서 예각은 0 < angle < 90로 되어있었는데, 왜 91로 작성했는지 의문.. 수정 후 채점하니 성공

:three: 결과 반환

  • angel에 70을 대입할 경우 if(angle > 0 && angle < 90) 으로 1을 반환
  • angel에 91을 대입할 경우 else if(angle > 90 && angle < 180) 으로 3을 반환
  • angel에 180을 대입할 경우 else if(angle === 180) 으로 4를 반환

:four: 실행

  • console.log(solution(70));을 호출하면, 1 반환
  • console.log(solution(90));을 호출하면, 3 반환
  • console.log(solution(180));을 호출하면, 4 반환

:fire: 다른 사람의 풀이 참고

if문과 삼항 연산자로 문제를 풀었는데, filter함수를 사용한 문제 풀이 과정에 가장 많은 댓글이 있었다.
switch문으로도 해결한 방법이 있어, 다양하게 접근할 수 있는 방법을 알 수 있어서 좋았다.

// [10명] filter 함수를 사용한 풀이 과정
function solution(angle) {
    return [0, 90, 91, 180].filter(x => angle>=x).length;
}

// [3명] switch문을 사용한 풀이 과정
function solution(angle) {
    switch(angle) {
        case 90: return 2;
        case 180: return 4;
        default:
            return angle > 0 && angle < 90 ? 1 : 3;
    }
}

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges