프로그래머스 3-27 TIL

Seunggyu Jung·2023년 3월 27일
0

Day 10. 1번: 점의 위치 구하기

Q. 사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다. x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

내 풀이

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

해설

  • 1단계. 해당 문제는 조건문이 나열되는 if elif 문제라는 것을 판단함
  • 2단계. if문으로 정갈하게 나타내도 괜찮지만, 삼항연산자를 이용하여 푸는 것이 더욱 간편할 것이라 결정
  • 3단계. 4가지 조건중, 3가지만 작성하여 삼항연산자를 완성

다른 풀이 및 해설

function solution(dot) {
    let answer;
    const [x, y] = dot;
    if (x > 0 && y >0) {
        answer = 1;
    } else if (x < 0 && y > 0) {
        answer = 2;
    } else if (x < 0 && y < 0) {
        answer = 3;
    } else {
        answer = 4;
    }
    return answer;
}

해당식에서 주목해야하는 점은 구조 분해 할당이다.

  • 구조 분해 할당: 배열이안 객체의 속성들을 분해하여 개별 변수들에 할당하는 JavaScript의 고유한 표현방식이다. 즉, 위 식에서 dot라는 배열을 개별 변수인 [x, y]의 x, y에 하나씩 담아내고 있다.
    해당 경우는 배열의 경우이며, 객체의 구조 분해 할당은 조금 늬양스가 다르다.
// 객체의 구조 분해 할당
var w = {p: 3, q: true};
var {p, q} = w;
console.log(p); // 3
console.log(q); // true

본 예제의 경우, w라는 객체가 key값만 들어있는 객체로 분해 되었지만, 각각 p와 q에 value값을 분해 할당하여 갖고 있다.


Day 10. 2번: 2차원으로 만들기

Q. 정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.
num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.


풀이

function solution(num_list, n) {
    let answer = [];
    let middle = [];
    for (let i = 0 ; i<= num_list.length - 1; i++){
        middle.push(num_list[i]);
        if (middle.length === n) {
            answer.push(middle);
            middle = [];
        }
        
    }
    return answer;
}

해설

본 문제 풀이는 정답을 보고 작성한 것이기에, 모레 반드시 정답을 지우고 다시 풀어볼 것

  • 1단계. 문제의 핵심은 배열안에 단순히 또다른 배열을 넣는것이라는 것을 인지하고 있어야함
  • 2단계. 때문에 반복문의 밖에 정답 배열안에 넣을 또다른 배열을 선언한다.
  • 3단계. 추가한 배열 안에는 num_list의 요소가 n개 까지 들어가야하며, n개인 경우, 배열을 정답 배열에 추가하고, 기존 배열을 초기화하는 알고리즘을 적용시킴

마무리

  • 구조 분해 할당에 대해 새롭게 배웠으며, 향후 복잡한 배열을 풀어 낼때 반드시 적용해 볼 것
  • 2번째 문제의 추가 배열의 경우, 지속적으로 비워둬야 하기 때문에 반복문 밖에서 선언...이라곤 하지만 사실 자세한 이유는 잘 모르겠음. 이에 대해 스터디 원들과 논의해볼 가치가 있다고 생각함
profile
감동을 주고픈 개발자(준비생)

0개의 댓글