Q. 중복된 숫자 개수
정수가 담긴 배열 array와 정수 n이 매개변수로 주어질 때, array에 n이 몇 개 있는 지를 return 하도록 solution 함수를 완성해보세요.
🚫제한 사항
1 ≤ array의 길이 ≤ 100
0 ≤ array의 원소 ≤ 1,000
0 ≤ n ≤ 1,000
❗입출력 예
array | n | result |
[1, 1, 2, 3, 4, 5] | 1 | 2 |
[0, 2, 3, 4] | 1 | 0 |
😀 내가 푼 답
function solution(array, n) {
return array.filter(num => num === n).length
}
- filter()
- filter()는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열을 리턴해줌
- 주로 특정 조건을 만족하는 새로운 배열이 필요할 때 사용하는 편
- 주어진 배열의 값들을 오름차순으로 접근해 콜백함수를 통해 true를 반환하는 요소를 기준으로 신규 배열을 반환함
- filter() 사용시 주의사항
- 객체를 직접 사용하거나 변형시키지는 않지만 콜백함수를 통해 수정할 수 있으며, 문제를 발생시키는 원인이 될수 있음
- 콜백함수 호출 범위는 콜백함수가 처음이 되기 이전이며 filter는 순회하는 도중에 추가된 요소는 접근하지 않음
=> 반대로 순회하는 도중 수정이 일어나면 변경된 값이 콜백함수에 전달되고 삭제된 요소는 접근하지 않음
😊 문제풀이 답안 OR 다른사람들 답안
function solution(array, n) {
var answer = 0;
for(var i = 0; i < array.length; i++){
if(array[i] == n){
answer++
}
}
return answer;
}
Q. 배열의 평균값
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
🚫제한 사항
0 ≤ numbers의 원소 ≤ 1,000
1 ≤ numbers의 길이 ≤ 100
정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.
❗입출력 예
num | result |
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | 5.5 |
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] | 94.0 |
😀 내가 푼 답
function solution(numbers) {
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
return sum / numbers.length;
}
😊 문제풀이 답안 OR 다른사람들 답안
// reduce()
const solution = (numbers) => numbers.reduce((a, c) => a + c) / numbers.length
// forEach()
function solution(numbers) {
let sum = 0
numbers.forEach(num => sum += num)
return (sum / numbers.length)
}
- reduce()
- 배열의 각 요소에 대해 주어진 함수를 실행하고, 하나의 결과값을 반환함
- 화살표 함수로 간단하게 표현할 수 있음
- array.reduce((accmulator, currentValue, currentIdx, array) => {
return accmulator, + currentValue;
}, initialValue);- accmulator: 값을 받아 누산하여 반환하는 기능, 초깃값을 지정했을 때 초깃값이 기본값이며, 초깃값이 없을 경우 배열의 첫번째 요소가 기본값이 됨
- currentValue: 처리할 현재 요소를 말함, 초깃값이 지정된 경우 배열의 첫번째 요소가 currentValue가 되고, 초기값이 없는 경우 배열의 두번째 요소가 currentValue가 됨
- currentIdx: 처리할 현재 요소의 인덱스, 선택사항
- array: reduce()가 실행된 배열, 선택사항
- initialValue: 초깃값을 지정할 수 있음
const arr = [1, 2, 3, 4];
const sum1 = arr.reduce((acc, cur) => acc + cur)
console.log(sum1); // 10
const sum2 = arr.reduce((acc, cur) => acc + cur, 9)
console.log(sum2); // 19
- forEach()
- 배열을 순회하는 여러 방법 중 하나
- map() 메서드와 비슷하지만 따로 return하는 값이 없다는 차이점이 있음
- forEach 메서드는 배열을 순회하기 위해 사용하지만, 기본적인 for문과 다른 방식으로 함수를 사용함
- array.forEach((currentValue, idx, arr) => {])
- forEach 메서드는 매개변수(parameter)와 함께 배열의 각 요소에 적용하게될 콜백함수를 전달함
- 매개변수로 요소, idex, 호출한 배열을 받음
- currentValue - 배열의 값
- idx - 현재 항목의 인덱스, 생략 가능
- arr - 현재 항목의 배열, 생략가능
Q. 짝수 홀수 개수
정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.
🚫제한 사항
1 ≤ num_list의 길이 ≤ 100
0 ≤ num_list의 원소 ≤ 1,000
❗입출력 예
num_list | result |
[1, 2, 3, 4, 5] | [2, 3] |
[1, 3, 5, 7] | [0, 4] |
😀 내가 푼 답
function solution(num_list) {
return [
num_list.filter((even) => even % 2 === 0).length,
num_list.filter((odd) => odd % 2 !== 0).length,
];
}
😊 문제풀이 답안 OR 다른사람들 답안
// for
function solution(num_list) {
var answer = [0,0];
for(let a of num_list){
answer[a%2] += 1
}
return answer;
}
// switch
function solution(num_list) {
let arr = [0, 0];
for (let i = 0; i < num_list.length; i++) {
switch (num_list[i] % 2 === 0) {
case true: arr[0] +=1; break;
default: arr[1] +=1; break;
};
console.log(arr);
};
return arr;
};
// for
function solution(numbers) {
let count = [0, 0];
for (let i = 0; i < num_list.length; i++) {
if (num_list[i] % 2 === 0) {
count[0]++;
} else count[1]++;
}
return count;
}
Q. 배열 자르기
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
🚫제한 사항
2 ≤ numbers의 길이 ≤ 30
0 ≤ numbers의 원소 ≤ 1,000
0 ≤num1 < num2 < numbers의 길이
❗입출력 예
num_list | num1 | num2 | result |
[1, 2, 3, 4, 5] | 1 | 3 | [2, 3, 4] |
[1, 3, 5] | 1 | 2 | [3, 5] |
😀 내가 푼 답
function solution(numbers, num1, num2) {
return numbers.slice(num1, num2 + 1);
}
- slice()
- slice는 새로운 배열로 반환됨
=> splice()와 다른 점!! splice()는 원본 배열을 변경함 - array.slice(startIdx, endIdx)
- 반환된 타입은 배열
- start를 지정하지 않으면 0부터 시작되고, end는 종료할 인덱스 전까지 리턴하며 지정하지 않거나 배열의 길이보다 큰수가 오면 배열의 길이까지만 리턴함
- slice는 새로운 배열로 반환됨
😊 문제풀이 답안 OR 다른사람들 답안
// &&
function solution(numbers, num1, num2) {
return numbers.filter((n, i) => num1 <= i && i <= num2);
}
// for
function solution(numbers, num1, num2) {
//return numbers.splice(num1, num2);
let res = [];
for(;num1 <= num2; num1++) {
res.push(numbers[num1]);
}
return res;
}
Q. 배열 원소의 길이
문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.
🚫제한 사항
1 ≤ strlist 원소의 길이 ≤ 100
strlist는 알파벳 소문자, 대문자, 특수문자로 구성되어 있습니다.
❗입출력 예
strlist | result |
["We", "are", "the", "world!"] | [2, 3, 3, 6] |
["I", "Love", "Programmers."] | [1, 4, 12] |
😀 내가 푼 답
// map
function solution(strlist) {
return strlist.map((x) => x.length)
}
// for
function solution(strlist) {
let result = []
for(let i = 0; i < strlist.length; i++){
result.push(strlist[i].length)
}
return result
}
😊 문제풀이 답안 OR 다른사람들 답안
function solution(strlist) {
var answer = [];
strlist.forEach(el=>answer.push(el.length))
return answer;
}
Q. 배열 뒤집기
정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.
🚫제한 사항
1 ≤ num_list의 길이 ≤ 1,000
0 ≤ num_list의 원소 ≤ 1,000
❗입출력 예
strlist | result |
[1, 2, 3, 4, 5] | [5, 4, 3, 2, 1] |
[1, 1, 1, 1, 1, 2] | [2, 1, 1, 1, 1, 1, ] |
[1, 0, 1, 1, 1, 3, 5] | [5, 3, 1, 1, 1, 0, 1] |
😀 내가 푼 답
function solution(num_list) {
return num_list.reverse();
}
- reverse()
- 호출한 배열을 거꾸로 뒤집고, 그 배열을 가리키는 참조값을 리턴함
- 원본 배열이 변형이 됨
- [...arr].reverse() : 원본 배열을 복사해서 원본 배열은 유지하고, 새로운 배열을 리턴 하는 방법
😊 문제풀이 답안 OR 다른사람들 답안
//
function solution(num_list) {
let arr = [];
for (i = 1; i < num_list.length + 1; i++)
arr.push(num_list[num_list.length - i]);
return arr;
}
//
function solution(num_list) {
var answer = [];
var j = num_list.length
for(var i = 1; i <= j; i++){
answer.push(num_list[j-i])
}
return answer;
}
Q. 최댓값 만들기
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
🚫제한 사항
0 ≤ numbers의 원소 ≤ 10,000
2 ≤ numbers의 길이 ≤ 100
❗입출력 예
strlist | result |
[1, 2, 3, 4, 5] | 20 |
[0, 31, 24, 10, 1, 9] | 744 |
😀 내가 푼 답
function solution(numbers) {
numbers.sort((x, y) => y - x)
return numbers[0] * numbers[1]
}
- sort()'
- 배열을 정렬하기 위해서 사용하는 함수
- arr.sort(function)
- 정렬 순서를 정의하는 함수값이 생략되면 배열의 요소들은 문자열로 쥐급되어, 유니코드 값 순서대로 정렬됨
- 두 개의 배열 요소를 입력받음
- 매개변수로 a, b를 입력받은 경우,
리턴하는 값이 0보다 작을 경우, a가 b보다 앞에 오도록 정렬하고
리턴하는 값이 0보다 큰 경우, b가 a보다 앞에 오도록 정렬함
0을 리턴하면 a와 b의 순서를 변경하지 않음
😊 문제풀이 답안 OR 다른사람들 답안
function solution(numbers) {
let sum = [];
for (let i = 0; i < numbers.length - 1; i++) {
sum.push(numbers[i] * numbers[i + 1])
}
return Math.max(...sum);
}
- Math.max()
- 입력값으로 받은 숫자 중에서 가장 큰 숫자를 반환함
- 매개변수로 입력받은 값들중에 하나라도 숫자로 변환하지 못한다면 NaN로 반환함
- 매개변수를 제공하지 않으면 -Infinity를 반환함