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값을 분해 할당하여 갖고 있다.
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개인 경우, 배열을 정답 배열에 추가하고, 기존 배열을 초기화하는 알고리즘을 적용시킴