본문 바로가기
Algorithm/Programmers

[Programmers] 두 개 뽑아서 더하기(JavaScript)

by 백승전 2022. 3. 25.

 

알림

 

본 포스팅은 공부 목적으로 작성된 글이며 상업적 목적으로 절대 사용되지 않았음을 밝힙니다.

 

문제

 

https://programmers.co.kr/learn/courses/30/lessons/68644

 

코딩테스트 연습 - 두 개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

 

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해 주세요.

 

풀이

 

정수 배열 numbers가 주어집니다. 그리고 두 개를 뽑아 더하면 됩니다. 두 개를 뽑아 더하는 과정에서 반복이 일어나니 반복문을 사용하면 될 것 같고, 더한 값이 중복일 필요는 없기 때문에 담기 전에 포함되어 있는지 아닌지 확인 후 배열에 담아주면 될 것 같습니다. 참고로 오름차순으로 return을 하라고 되어 있으니 sort() 함수를 마지막에 사용해주면 될 것 같습니다.

 

코드

 

function solution(numbers) {
    let answer = [];
    
    for (let i = 0; i < numbers.length; i++) {
        for (let j = i+1; j < numbers.length; j++) {
            let sum = numbers[i] + numbers[j]
            
            if (!answer.includes(sum)) answer.push(sum);
        }
    }
    
    return answer.sort((a, b) => a - b); // 오름차순 정렬
}

 

받아 오는 정수 배열 numbers의 길이만큼 반복문을 돌려, 계속해서 더해줍니다. i와 j, 두 개 뽑아서 더할 것인데, i와 j는 서로 다른 숫자여야 하므로, 차이를 주기 위해 1을 더해줘 sum이란 변수에 i와 j를 더해준 값을 담아 줍니다.

 

하지만 최종적으로 담을 배열에는 더한 값들을 중복해서 담을 필요가 없으므로, sum 변수를 배열 answer에 담기 전에, includes() 함수를 사용해 포함되지 않은(중복되지 않은) 합들만 담았고, 마지막으로 문제에서 오름차순으로 정렬하라고 명시되었기 때문에 sort() 함수를 사용 return으로 문제를 해결했습니다.

댓글