logo
Posts프로그래머스점의 위치 구하기

점의 위치 구하기

문제 설명

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

제한 사항

img

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

입출력 예

  • dot의 길이 = 2
  • dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다
  • 500 ≤ dot의 원소 ≤ 500
  • dot의 원소는 0이 아닙니다.

입출력 예 설명

dotresult
[2, 4]1
[-7, 9]2

문제풀이 (나)

function solution(dot) {
    let result = 0;
    dot.forEach((d, i) => {
        dot[i] = Math.sign(d);
    });
    if (checkSign(dot, [1, 1])) {
        result = 1;
    } else if (checkSign(dot, [-1, 1])) {
        result = 2;
    } else if (checkSign(dot, [-1, -1])) {
        result = 3;
    } else if (checkSign(dot, [1, -1])) {
        result = 4;
    }
    return result;
}
 
function checkSign(dot, array) {
    return dot.toString() === array.toString();
}
  • 오늘은 소스를 정리하면서 하려다 더 어렵게 되어버린 것 같다.
  1. 우선 숫자를 음수인지 양수인지 확인을 하려고 Math.sign 메서드를 사용했다.
  • 양수이면 +1, 음수이면 -1을 리턴한다.
  1. 변경된 배열로 사분면을 구해보려고 했다.
  2. 배열 비교하는 부분은 소스가 길어지는 것 같아서 함수로 만들었다.
  3. 배열끼리 서로 자체적으로 비교가 안되서 문자열이나 JSON 형태로 변환한 후 비교를 해주어야 했다.
  • 나는 문자열로 변환해서 비교했다.

문제풀이 (다른사람)

function solution(dot) {
    const [num,num2] = dot;
    const check = num * num2 > 0;
    return num > 0 ? (check ? 1 : 4) : (check ? 3 : 2);
}
  • 가장 많은 좋아요를 받은 사람의 풀이를 가져왔다.
  1. 구조분해 / 비구조 할당하여 dot 의 인자를 한 개씩 가져온다.
  2. 가져온 인자를 서로 곱하고 0보다 큰지 비교한다.
  • 1 or 3 분면인지, 2 or 4 분면인지 확인하려고 한 것 같다.
  1. dot 의 첫 번째 인자가 양수인지 확인한다.
  • 1 or 4 분면인지, 2 or 3 분면인지 확인하려고 한 것 같다.
  1. 이제 나온 비교값으로 제 몇 사분면인지 리턴해준다.

레퍼런스