사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.
x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.
function solution(dot) {
if(dot[0] > 0){
if(dot[1] > 0){
return 1
}else{
return 4
}
}else {
if(dot[1] < 0){
return 3;
}else {
return 2;
}
}
}
// 1사분면 조건: dot[0] = 양수, dot[1] = 양수
// 2사분면 조건: dot[0] = 홀수, dot[1] = 양수
// 3사분면 조건: dot[0] = 홀수, dot[1] = 홀수
// 4사분면 조건: dot[0] = 양수, dot[1] = 홀수
풀긴 풀었는데 내가 쓴 코드는 뭔가 가독성이 떨어져서 다른 사람의 코드를 보았다.
function solution(dot) {
// 구조분해 할당?
if(dot[0] > 0 && dot[1] > 0) return 1;
if(dot[0] < 0 && dot[1] > 0) return 2;
if(dot[0] < 0 && dot[1] < 0) return 3;
if(dot[0] > 0 && dot[1] < 0) return 4;
}
확실히 깔끔하다.. 간단한 문제라면 && 논리곱 연산자 써서 한 줄에 나올 수 있게 하는게 좋아보인다.
정수 배열 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) {
var arr = [];
for(let i = 0; i < num_list.length / n; i++){
arr = [...arr, num_list.slice(i*n,i * n + n)];
}
return arr;
}
// 중요!: num_list의 길이는 n의 배 수개이다.
/*
if(배열의 길이가 0보다 크면){
slice문법을 2개씩 뺌
뺀것을 가지고 arr로 push
*/
slice랑 splice랑 헷갈려서 푸는데 시간 오래걸림
splice() 메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경한다.
Array.prototype.splice()
slice() 메서드는 어떤 배열의 시작index부터 끝index까지에 대한 복사본을 새로운 배열 객체로 반환한다.
Array.prototype.slice()
머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
function solution(numbers, k) {
// 공 가지고 있음
let ball = 1;
for(let i = 0; i < k-1; i++){
ball += 2;
if(ball > numbers.length - 1){
ball -= numbers.length;
}
}
return ball;
}
// k번째로 공을 던지는 사람의 번호 = 마지막에 던지는 사람!
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
function solution(numbers, direction) {
// 원본 보존
let arr = numbers;
if(direction === "right") {
arr.unshift(arr.pop(arr.length - 1));
} else {
arr.push(arr.shift(arr.length[0]));
}
return arr;
}
// right: 배열을 한칸씩 오른쪽으로 밀고 뒤에 있는 걸 앞으로
// left: 배열을 한칸씩 왼쪽으로 밀고 앞에 있는 걸 뒤로
// 결론은
// right 하면 마지막 인덱스를 빼서 앞에 다시 넣고
// left 하면 앞에 인덱스를 빼서 뒤에 넣음