[알고리즘] 두 개 뽑아서 더하기
문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
알고리즘
1.첫 요소와 나머지 요소를 더한 경우의 수를 배열에 담는다.
2.다음 요소와 나머지 요소를 더한 경우의 수를 배열에 담는다.
3.마지막으로 오름차순으로 결과를 낸다.
구현
for문 말고 재귀로 해봤더니 23초나 걸린다 ㅋㅋㅋㅋㅋ
function solution(numbers) {
var answer = [];
function recurAdd (arr) {
if(arr.length === 0){
return ;
}
let head = arr[0];
let rest = arr.slice(1);
for(let i=0; i < rest.length; i++){
if(!(answer.includes(head+rest[i])))
answer.push(head+rest[i]);
}
recurAdd(rest);
}
recurAdd(numbers);
return answer.sort((a,b)=> a-b);
}
for문으로 바꿔서 했더니 0.07ms
function solution(numbers) {
var answer = [];
for(let i=0; i < numbers.length-1; i++){
for(let j=i+1; j < numbers.length; j++) {
if(!(answer.includes(numbers[i]+numbers[j]))){
answer.push(numbers[i]+numbers[j])
}
}
}
return answer.sort((a,b)=> a-b);
}
다른사람 풀이
function solution(numbers) {
const temp = []
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
temp.push(numbers[i] + numbers[j])
}
}
const answer = [...new Set(temp)]
return answer.sort((a, b) => a - b)
}
set 활용한 부분은 참조해서 활용해봐야할 것 같다.
Author And Source
이 문제에 관하여([알고리즘] 두 개 뽑아서 더하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leobit/알고리즘-두-개-뽑아서-더하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)