알고리즘 - 두 개 뽑아서 더하기
업데이트:
두 개 뽑아서 더하기
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항 numbers의 길이는 2 이상 100 이하입니다 numbers의 모든 수는 0 이상 100 이하입니다.
입출력 예
numbers
[2, 1, 3, 4, 1]
result
[2, 3, 4, 5, 6, 7]
입출력 예 설명
- 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 해야 합니다.
글코딩
해당 문제는 N0 ~ Nn 개의 숫자 배열이 주어졌을때 서로 다른 인덱스끼리의 합의 숫자를 배열에 담아 오름차순으로 정렬 후 리턴하라는 문제이다.
- (N0 + N1), (N0 + N2), (N0 + N3), …, (N0 + Nn);
-
(N1 + N2), (N1 + N3), (N1 + N4), …, (N1 + Nn);
.
.
. - 좌항 Nn 은 배열을 순환하는데 이때 자기 자신 인덱스위치의 이후부터만 루프를 돈다.
- 우항 Nn 은 좌항의 인덱스값을 제외한 나머지값들이 매 배열순환마다 1씩 증가하는 값을 갖는다.
- 이 값들의 각각의 합을 빈 배열에 넣는데 이때 중복되는 값이 있다면 넣지않는다
- 이 빈 배열에 값이 모두 들어오면 오름차순으로 정렬하여 최종 결과배열을 리턴한다.
Code
function solution(numbers) {
var answer = [];
for(let i = 0; i < numbers.length - 1; i++) { // 좌항의 값
for(let j = i + 1; j < numbers.length; j++) { // 우항의 값
var sum = numbers[i] + numbers[j];
if(!answer.includes(sum)) answer.push(sum); // 결과 배열에 중복되는 값이 없으면 push
}
}
return answer.sort((a, b) => a-b); // 오름차순으로 정렬
}
댓글남기기