ALGORITHM/JavaScript

[코딩테스트] 배열 두 배 만들기

1juyoung 2025. 6. 25. 18:51

문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

제한사항
-10,000 ≤ numbers의 원소 ≤ 10,0001 ≤ numbers의 길이 ≤ 1,000

입출력 예
numbers 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
[1, 2, 3, 4, 5]의 각 원소에 두배를 한 배열 [2, 4, 6, 8, 10]을 return합니다.
입출력 예 #2
[1, 2, 100, -99, 1, 2, 3]의 각 원소에 두배를 한 배열 [2, 4, 200, -198, 2, 4, 6]을 return합니다.

 

나의 코드 (메모리 & 시간 & 문제 링크와 같은 자세한 정보는 해당 링크를 통해 확인해 주세요! )

function solution(numbers) {
    var answer = [];
    for (a of numbers) {
        a = a * 2;
        answer.push(a);
    }
    return answer;
}

메모리: 33.7 MB, 시간: 0.38 ms

 

for...of 문을 이용해 배열 numbers를 순회하면서 각 원소를 2배 한 후 answer 배열에 push()하여 결과를 저장하는 방식.

 

다른 사람의 코드

1. reduce() 사용

function solution(numbers) {
    return numbers.reduce((a, b) => [...a, b * 2], []);
}

 

2. map() 사용

const solution = (numbers) => numbers.map((number) => number * 2)

 

나의 코드의 경우엔 코드가 길고 반복적이지만,
다른 분들의 코드의 경우 간결하고 가독성 더 좋은 걸 확인할 수 있었다 😭...

자바스크립트에서 제공되는 함수들을 많이 사용해보고 활용해 보아야겠다!

 

6/27 새롭게 풀어본 방식

function solution(numbers) {
    var answer = [];
    numbers.forEach(n => answer.push(n*2));
    return answer;
}

 

메모리: 33.6 MB, 시간: 0.18 ms

기존에 for of 반복문을 사용했을 때는 메모리가 33.7MB, 실행 시간은 0.38ms가 나왔는데, 같은 로직을 내장 함수인
forEach()로 바꾸자 메모리는 33.6MB, 실행 시간은 0.18ms로 조금 더 효율적인 결과가 나왔다.
-> 메모리: 0.1MB 감소, 시간: 0.20ms 감소


이번 비교를 통해 자바스크립트에서 제공하는 내장 함수들이 단순히 문법 편의성만이 아니라 실제 성능 면에서도 이점이 있을 수 있다는 걸 느꼈다. 앞으로는 반복 작업을 처리할 때 먼저 map이나 forEach 같은 함수들을 떠올려서 더 효율적이고 깔끔한 코드를 작성하려고 한다.