SG의 개발 공부로그

각도기 [프로그래머스 코딩테스트 입문] 본문

CodingTest

각도기 [프로그래머스 코딩테스트 입문]

DebeloperSG 2023. 1. 4. 10:52
728x90

각도기

문제 설명

각에서 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합니다.

 

 

풀이

삼항연자를 이용해서 풀었으나 삼중이상으로 쓰이다보니 가독성이 떨어지는 단점이 생겼다.

협업을 자주하는 코딩은 내 코드를 다른사람이 봤을때 이해하기 쉽고 보기편해야한다.

 

삼항연산자에 대한 고찰 참고링크

https://yceffort.kr/2022/02/think-about-ternary-operator

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

 

 

다른풀이

if문으로 eles if 와 else를 추가해가면서 풀이했지만

나는 왠만해서 if로 함수탈출이 가능하면 최대한 사용하지 않으려고한다.

else를 피하는 이유 참고 링크

https://velog.io/@gomjellie/else-%EC%93%B0%EC%A7%80%EB%A7%88

 

🙅🏻‍♀️ 니들은 else 같은거 쓰지마라

하지말라면 하지마. 왜? 결혼하지마?

velog.io

 

하지만 의견은 조금 나뉘는 것 같다. else가 무조건 적으로 안좋다는 말을 위험한거 같고,

else가 없어도 말이 되니까 구태여 쓸 필요가 없다 정도가 좋은 정리라고 생각한다.

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

 

몇몇에선 else를 써야만 하는 상황은 바꿔 말하면 요즘 유행하지 않는 코딩 스타일이라는 반증이라고들 한다.

조금씩 else 안쓰는것에 익숙해지는걸 권장.

 

그래서 if문에서 else if를 사용하지 않고 짜보았다.

훨씬 간결하고 깔끔해졌다.

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

 

 

또 다른 풀이 

if문만 생각하고 풀이하다가 

다른사람 풀이 중에서 생각지 못한 풀이를 보아서 가져왔다.

조건을 배열로 담아 filter 함수를 돌려서 조건에 맞는 배열을 뽑아낸 후

그 배열의 length (길이) 를 return 했다.

기발하긴 한데 그래도 난 위에 if문이 코드 행을 많아지지만 좀 더 가독성은 좋은거 같다.

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

 

728x90