본문 바로가기

Coding Test/Programmers

[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 18 - 점의 위치 구하기)

728x90

 

# 문제 

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.



# 답안 

// 1. 입력: dot -> 정수 배열 [1,2] [-1,-2] 같은거
// 2. 출력: 1,2,3,4 중에 하나 반환
// 3. 요구사항: 사분면에 따라서 1,2,3,4 반환하게 하기


// 방법1) if-else 구문 사용
function solution(dot) {
    if (dot[0] > 0 && dot[1] > 0){
        return 1
    } else if (dot[0] < 0 && dot[1] > 0){
        return 2
    } else if (dot[0] < 0 && dot[1] < 0){
        return 3
    } else (dot[0] > 0 && dot[1] < 0){
        return 4
    }
}


// 방법2) 조금 더 축약 버전
function solution(dot) {
  let answer = 0;
  if (dot[0] > 0 && dot[1] > 0) answer = 1;
  if (dot[0] < 0 && dot[1] > 0) answer = 2;
  if (dot[0] < 0 && dot[1] < 0) answer = 3;
  if (dot[0] > 0 && dot[1] < 0) answer = 4;
  return answer;
}


// 방법3) 삼항 연산자 사용 -> 가장 나은 방법
function solution(dot) {
    return dot[0] > 0 ? dot[1] > 0 ? 1 : 4 : dot[1] > 0 ? 2 : 3;
}



# 인사이트 

// 3번 방법이 (가독성, 효율성, 간결성 측면에서) 제일 나은 코드이다. 
// 1) 가독성: 한줄의 코드, 삼항연산자를 통해 사분면을 결정하는 로직을 명확하게 표현 
// 2) 효율성: 단일한 반환문을 사용해서 함수의 실행흐름이 간결함 비교적 작은 연산자들을 사용하여 사분면을 결정하므로 효율적 
// 3) 간결성: 코드가 간결하고 짧다. 불필요한 if-else 블록이나 변수 선언 없이도 필요한 사분면을 결정할 수 있음

 

 

function solution(dot) {
    return dot[0] > 0 ? dot[1] > 0 ? 1 : 4 : dot[1] > 0 ? 2 : 3 ;
}

 

< 3번 방법 해석 >

* dot[0]x좌표, dot[0]y좌표를 나타냄

1.  dot[0] > 0true인 경우 (x좌표가 양수인 경우)

dot[1] > 0 true면 (y좌표가 양수) ▶   1사분면 
dot[1] > 0 false면 (y좌표가 음수) ▶  4사분면 


2.  dot[0] > 0 false인 경우 (x좌표가 양수인 경우)

dot[1] > 0 true면 (y좌표가 양수) ▶  2사분면  

dot[1] > 0false면 (y좌표가 음수) 3사분면  

 

728x90