정수 배열 numbers
가 매개변수로 주어집니다. numbers
의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.
numbers
의 원소 ≤ 10,000numbers
의 길이 ≤ 1,000numbers | result |
---|---|
[1, 2, 3, 4, 5] | [2, 4, 6, 8, 10] |
[1, 2, 100, -99, 1, 2, 3] | [2, 4, 200, -198, 2, 4, 6] |
입출력 예 #1
입출력 예 #2
const solution = (numbers) => numbers.map(item => item * 2);
/* 내가 처음 작성한 코드이다. map을 이용하여 간단하게 콜백 함수에 2를 곱한 값을 리턴해 주도록 만들어
주었다. */
function solution(numbers) {
return numbers.map(item => item * 2);
}
/* 위의 화살표 함수를 선언문으로 바꾸어보았다. */
const solution = (numbers) => numbers.reduce((a, b) => [...a, b * 2], []);
/* 이건 다른분의 풀이를 보다가 신기해서 공부할 겸 가져와봤다. reduce를 이용하여 작성한 코드이다.
먼저, 초기값을 []로 만들어준다. reduce 콜백 함수는 누적 배열 a에 현재 배열 요소b의 두배 값을
추가하는 동작을 수행하도록 만들어주었다. 이때 a를 스프레드 문법을 사용해준 이유는 원본 배열의 변경 없이
새로운 배열을 만들기 위해서다. 스프레드 문법 대신 push를 사용해주었다면 원본 배열 numbers에도
요소가 추가되기 때문에 원본 배열이 변경된다. push를 사용한 코드를 아래에 작성해 보았다. */
const solution = (numbers) => {
return numbers.reduce((a, b) => {
a.push(b * 2);
return a;
},[]);
}
/* 스프레드 문법을 사용하면 불변성(immutability)을 유지하는 것이 보다 간단해지며,
함수형 프로그래밍에 적합한 코드를 작성할 수 있다. 이로 인해 코드의 예측 가능성과 유지 보수성이 향상된다. */
const solution = (numbers) => {
let arr = [];
for(let i = 0; i < numbers.length; i+=1){
arr.push(numbers[i] * 2);
}
return arr;
}
/* for문을 통해서 작성한 코드이다. map을 활용한 방식보다는 가독성이나 효율성이 떨어지지만 여러가지
코드를 작성해보고 싶어서 작성해보았다. */
const solution = (numbers) => {
let arr = [];
for(let i = 0; i < numbers.length; i+=1){
arr[i] = number[i] * 2;
}
return arr;
}
/* 위의 코드에서 push 메서드를 사용하지 않고 인덱스로 접근하여 추가해주었다. */
const solution = (numbers) => {
var answer = [];
numbers.forEach(number => answer.push(2*number))
return answer;
}
/* forEach를 이용하여 작성한 코드이다. */