Programmers 월간 코드 챌린지 시즌1 - 두 개 뽑아서 더하기 (JavaScript)
Programmers(프로그래머스)의 코딩테스트 연습문제 Level 1 중 월간 코드 챌린지 시즌1 문제인 두 개 뽑아서 더하기 문제를 JavaScript를 사용하여 문제를 풀어보도록 하겠습니다.
문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
입출력 예
numbers | result |
[2,1,3,4,1] | [2,3,4,5,6,7] |
[5,0,2,7] | [2,5,7,9,12] |
입출력 예 설명
입출력 예 #1
- 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
- 3 = 2 + 1 입니다.
- 4 = 1 + 3 입니다.
- 5 = 1 + 4 = 2 + 3 입니다.
- 6 = 2 + 4 입니다.
- 7 = 3 + 4 입니다.
- 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.
입출력 예 #2
- 2 = 0 + 2 입니다.
- 5 = 5 + 0 입니다.
- 7 = 0 + 7 = 5 + 2 입니다.
- 9 = 2 + 7 입니다.
- 12 = 5 + 7 입니다.
- 따라서 [2,5,7,9,12] 를 return 해야 합니다.
작성한 답
solution.js
function solution(numbers) {
return [...new Set(numbers.reduce((ac,v,i,ar)=>[...ac,...ar.slice(i+1).map(v_=>v_+v)],[]))].sort((a,b)=>a-b);
}
설명
정수 배열 numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성하는 문제입니다.
입출력 예 설명을 보시면 바로 해결방법은 떠오르는 문제입니다.
아마 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 배열에 담는 부분을 많은 분들이 반복문 for문을 사용하여 해결하셨으리라 생각됩니다.
저는 그보다 reduce와 map 을 사용하는 것이 코드를 깔끔하게 볼 수 있고 사용하기도 좋다고 생각하여 코드를 작성해 보았습니다.
reduce를 사용해 배열을 하나 초기화 하고, 배열에 기존 numbers 배열을 나타내는 인수인 ar에 현재 가리키고 있는 값의 뒷부분들을 slice(i+1)로 잘라 배열을 만들고 해당 배열을 map을 사용하여 현재 가리키고 있던 값을 모든 요소에 더해준 뒤 reduce에 더해주는 배열에 추가해줍니다.
그렇게 for문을 두번 돌려야 나오는 결과를 손 쉽게 구해준 뒤 [...new Set()]으로 요소가 중복되지 않은 unique 한 배열을 만들어내고,
sort((a,b)=>a-b)로 하여금 수의 크기를 비교해서 오름차순으로 정렬해줍니다.
그냥 sort()를 사용하면 숫자 자체의 크기가 아닌 사전순으로 정렬되니 주의해주시기 바랍니다.
입출력 예로 들자면 [2, 5, 7, 9, 12] 로 정렬되어야 할 배열이 [12, 2, 5, 7 ,9]로 정렬되어 나옵니다.
도움이 되셨다면 공감, 댓글 부탁드립니다!
궁금하신 점이나 요청 사항은 언제든지 말씀 해주세요!
감사합니다.
'Developer > Algorithm' 카테고리의 다른 글
Programmers 프로그래머스 코딩테스트 연습 - 동물 수 구하기 (MYSQL) (0) | 2020.09.20 |
---|---|
Programmers 코딩테스트 연습 - 최솟값 구하기 (MYSQL) (0) | 2020.09.19 |
Programmers 코딩테스트 연습 - 약수의 합 (JavaScript) (0) | 2020.09.16 |
Programmers 코딩테스트 연습 - 스킬트리 (JavaScript) (0) | 2020.09.15 |
Programmers 코딩테스트 연습 - 최대공약수와 최소공배수 (JavaScript) (0) | 2020.09.14 |
댓글