DAY 3.
문제 1. 정수 num1, num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 return 하도록 solution 함수를 완성해주세요.
A :
function solution(num1, num2) {
let answer = 0;
answer = num1 % num2
return answer;
}
% 는 나머지를 구하는 연산자임.
문제 2. 중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
A :
function solution(array) {
array.sort((a, b) => a - b); // 주어진 배열을 오름차순으로 정렬
const answer = Math.floor(array.length / 2); // 중앙 인덱스 계산
return array[answer]; // 중앙값 반환
}
sort()
: JavaScript 배열의 내장 메소드로, 배열의 요소들을 정렬하는 데 사용됩니다. sort() 메소드는 원본 배열을 직접 변경하며, 변경된 배열을 반환한다.
기본적으로 sort() 메소드는 배열의 요소를 유니코드 문자열 순서로 정렬한다.
이때, 각 요소는 문자열로 변환되어 비교됩니다. 예를 들어, [3, 1, 2]라는 배열을 sort()로 정렬하면 [1, 2, 3]이 되며, 원본 배열인 [3, 1, 2]도 변경된다.
정렬 순서를 변경하거나 사용자 정의 정렬 기준을 적용하려면 비교 함수를 제공해야 한다.
비교 함수는 선택적으로 sort() 메소드의 인자로 전달할 수 있다.
비교 함수는 두 개의 인자를 받아서 비교한 결과를 반환해야 합니다. 반환 값에 따라 요소들이 정렬된다. 예를 들어, 오름차순으로 정렬하려면 (a, b) => a - b와 같은 비교 함수를 사용할 수 있다.
문제 3. 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
function solution(array) {
let countMap = new Map(); // 숫자의 등장 횟수를 저장할 맵
// 배열의 요소들을 순회하며 등장 횟수를 카운트
for (let num of array) {
if (countMap.has(num)) {
countMap.set(num, countMap.get(num) + 1); // 이미 등장한 숫자라면 등장 횟수 증가
} else {
countMap.set(num, 1); // 처음 등장하는 숫자라면 등장 횟수 1로 설정
}
}
let maxCount = 0; // 가장 큰 등장 횟수
let mode = []; // 최빈값을 저장할 배열
// 맵을 순회하며 최빈값을 찾음
for (let [num, count] of countMap) {
if (count > maxCount) {
maxCount = count;
mode = [num];
} else if (count === maxCount) {
mode.push(num); // 최빈값이 여러 개인 경우 배열에 추가
}
}
return mode.length > 1 ? -1 : mode[0]; // 최빈값이 여러 개면 -1, 그렇지 않으면 최빈값 반환
}
먼저, 주어진 배열 array를 순회하며 각 숫자의 등장 횟수를 카운트하기 위해 countMap이라는 Map 객체를 사용.
countMap은 숫자를 키(key)로 가지고, 해당 숫자의 등장 횟수를 값(value)로 가지게 된다.
배열 array를 순회하며 각 숫자에 대해 다음과 같은 작업을 수행합니다:
만약 countMap에 해당 숫자가 이미 존재한다면, 해당 숫자의 등장 횟수를 1 증가시킨다.
만약 countMap에 해당 숫자가 존재하지 않는다면, 해당 숫자를 새로운 키로 추가하고 등장 횟수를 1로 설정한다.
등장 횟수를 카운트한 후, 가장 큰 등장 횟수를 갖는 값(최빈값)을 찾기 위해 countMap을 순회한다. 순회하면서 다음과 같은 작업을 수행한다.
만약 현재 숫자의 등장 횟수가 maxCount(현재까지 확인한 최대 등장 횟수)보다 크다면, maxCount를 현재 숫자의 등장 횟수로 업데이트하고, mode 배열을 현재 숫자로 초기화한다.
만약 현재 숫자의 등장 횟수가 maxCount와 같다면, mode 배열에 현재 숫자를 추가한다. 이렇게 하면 최빈값이 여러 개인 경우 mode 배열에 여러 숫자가 저장된다.
mode 배열의 길이를 확인하여 최빈값이 여러 개인지 판단한다. 만약 mode 배열의 길이가 1보다 크다면, 최빈값이 여러 개이므로 -1을 반환한다. 그렇지 않으면 mode 배열의 첫 번째 요소를 반환하여 최빈값을 반환한다.
문제 4. 정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
function solution(n) {
let answer = [];
for (let i = 1; i <= n; i++) {
if (i % 2 === 1) {
answer.push(i);
}
}
return answer;
}
i가 2로 나누어서 나머지가 1일 때만, 즉 홀수 일 때만 answer 배열에 push(추가) 하도록 함.