코딩테스트

[프로그래머스] 배열 두 배 만들기

john-lennon 2026. 4. 1. 15:53

문제 설명

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

 

제한사항

-10,000 ≤ numbers의 원소 ≤ 10,000
1 ≤ 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]

 


 

목적

배열 numbers에 있는 각 원소 * 2 = 배열 return

 

나의 코드

function solution(numbers) {
    const answer = [];
    
    for (i = 0; i < numbers.length; i++) {
        let x = numbers[i];
        answer.push(x * 2);
    }
    
    return answer;
}

 

방식

for문으로 하나씩 돌아가면서 꺼내서 * 2 함


 

case 1 다른 사람의 코드 (reduce)

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

 

이 코드의 장점

reduce란 배열을 하나의 값으로 줄이는 함수

 

기본형태

array.reduce((누적값, 현재값) => 결과, 초기값)

 

< reduce를 적용시키기 위한 연습문제.. >

 

문제 1

[1, 2, 3, 4] 배열 합 구하기

 

나의 답

[1, 2, 3, 4].reduce((acc, cur) => acc+cur, 0)

 

문제 2

숫자배열 [1, 2, 3, 2, 1] 을 -> { 1: 2, 2: 2, 3: 1 }  형태로 바꾸기

 

나의 답

[1, 2, 3, 2, 1].reduce((acc, cur) => {
	if (acc[cur]) {
		acc[cur] = acc[cur] + 1;
	} else {
		acc[cur] = 1;
	}
	return acc;
}, {})

 


 

case 2 다른 사람의 코드 (map)

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

 

이 코드의 장점

for문 처럼 직접 반복문을 돌리지 않아도 되어서 코드가 훨씬 간결하다

가독성이 좋고 의도가 바로 보인다

 

< map 을 적용시키기 위한 연습문제... >

 

문제 1

배열 [1, 2, 3, 4, 5] 가 있는데 각 숫자를 제곱한 배열을 return 해라

 

나의 답

const answer = practice.map(number => number * number);

 

문제 2

배열에서 짝수만 골라서 2배 만들기

 

나의 답

const answer = practice.filter((number) => number % 2 === 0).map((number) => number * 2);

 


 

느낀점 : for문을 사용해서 배열을 하나씩 꺼내 처리하는 방법도 있지만, map이나 reduce를 활용하면 훨씬 간결하게 표현할 수 있다는 걸 알게 되었다. 특히 map은 배열의 각 요소를 변형해서 새로운 배열을 만들 때 직관적이고 가독성이 좋아서 사용하기 편했다. 반면 reduce는 아직 익숙하지 않아서 어렵게 느껴지지만, 다양한 방식으로 활용할 수 있는 만큼 반복 연습이 필요하다고 느꼈다.