프로그래머스[2] : 두개뽑아서 더하기

Seungmin Shin·2021년 11월 16일
1
post-custom-banner

필요조건

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

입출력예시

numberresult
[2,1,3,4,1][2,3,4,5,6,7]
[5,0,2,7][2,5,7,9,12]

수도코드

두가지의 인덱스를 조회해야하기 때문에 반복문을 두번 중첩하여 각각의 인덱스를 더해야한다.
하지만 더하다보면 중복되어 나오는 수가 있을텐데, 이것을 제외하는 방법을 생각해야 한다.

코드작성

function solution(numbers) {
    const result = []
    
    for(let i = 0 ; i < numbers.length - 1 ; i++) {
        for(let j = i + 1 ; j < numbers.length ; j++) {
            const sum = numbers[i] + numbers[j]
            if(result.indexOf(sum) < 0) {
                result.push(sum)
            }
        }    
    }
    
    result.sort((a,b) => a - b)
    return result
}

코드해석

수도코드에서 작성했던것 처럼 두개의 반복문을 사용해 두가지의 인덱스를 더할 수 있게 세팅을 한다.
그렇게 반복문을 돌며 계속 인덱스를 더해간다, 하지만 전부 배열에 담아서는 안된다.
왜냐하면 중간중간 값이 중복되어 들어오는 값이 있을것이기 때문,
이때 indexOf()를 이용한다, indexOf 메서드는 찾고자 하는 값이 있다면 해당 인덱스를 부여하지만
그렇지 않다면 -1을 동일하게 부여하기에 이 점을 이용하는것이다,
조건식을 달고, 현재 배열과 이제 들어가야하는 수를 비교해서 -1이 나온다면 현재 배열에 없는 수이기에
배열에 집어넣고, -1 이 아닌 다른 수가 나온다면 배열에 포함 되어있는 수이기 때문에 넣지 않으면
중복되는 수 없이 배열을 생성할 수 있다, 그리고 최종적으로 그 배열을 내림차순 정렬하게 되면
원하는 값을 얻을 수 있다.
profile
Frontend Developer
post-custom-banner

0개의 댓글