사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다.
사분면은 아래와 같이 1부터 4까지 번호를매깁니다.
x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.
문제링크https://school.programmers.co.kr/learn/courses/30/lessons/120841
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(dot) {
var answer = 0;
if( (Math.sign(dot[0]) === 1) && (Math.sign(dot[1]) === 1) ) {
answer = 1
} else if ( (Math.sign(dot[0]) === -1) && (Math.sign(dot[1]) === 1) ){
answer = 2
} else if ( (Math.sign(dot[0]) === -1) && (Math.sign(dot[1]) === -1) ){
answer = 3
} else if ( (Math.sign(dot[0]) === 1) && (Math.sign(dot[1]) === -1) ){
answer = 4
return answer;
}
내가 풀었던 답안이다 음수 양수 구분을 위해 Math.sign()을 사용했는데 오히려 메서드를 사용해서 코드가 지저분해졌다
function solution(dot) {
if (dot[0] > 0){
return dot[1] > 0 ? 1 : 4;
} else {
return dot[1] > 0 ? 2 : 3;
}
}
삼항연산자와 0을 통한 음수 양수 구분을 하면 코드가 훨씬 간결해진다 삼항연산자를 중첩하면 더 짧아지겠지만 그러면 가독성이 떨어지기에 이정도가 좋아보인다
function solution(dot) {
const [num,num2] = dot;
const check = num * num2 > 0;
return num > 0 ? (check ? 1 : 4) : (check ? 3 : 2);
}
이게 이 문제를 따로 정리하는 이유이다
배열로 주어진 매개변수를 구조 분해 할당을 통해 하나씩 구분해 주었으며
이를 통해 배열 내부에 요소들 간 계산이 가능해졌다 물론 dot[0] * dot[1]로 할 수 있지만
코드가 한 두 줄 늘어나도 알아보기 쉬운 코드가 더 좋지 않을까 생각한다
구조분해할당을 왜 써야할까 어떻게 써야할까 몰랐는데 이렇게 쓸 수 있구나 알게 되었다
그리고 삼항연산자가 중첩되어있긴 하지만 ()를 통해 구분해주었기에 한 번 중첩까진 괜찮을 것 같다
'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글
| 옷가게 할인 받기(총 구매 가격에 따른 할인률 적용가) (0) | 2023.05.26 |
|---|---|
| 아이스 아메리카노(구매 가능 수와 잔돈 계산) (0) | 2023.05.26 |
| 2주차 숙제 (0) | 2023.05.25 |
| 짝수의 합 (0) | 2023.05.25 |
| 각도기 구하기 (0) | 2023.05.25 |