개발 공부/알고리즘 문제 풀이

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

종범2 2021. 4. 7. 11:49

문제

프로그래머스 월간 코드 챌린지 시즌1 두 개 뽑아서 더하기

 

programmers.co.kr/learn/courses/30/lessons/68644?language=javascript

 

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

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

programmers.co.kr

언어

바스크립트(JavaScript)

 

접근 방법

  1. n개 중에 r개를 뽑는 조합 배열을 생성한다.
  2. 조합 배열을 이용하여 두 개 뽑아서 더한 결과 배열을 생성한다.
  3. set을 이용하여 중복을 제거한다.
  4. sort를 이용하여 오름차순으로 정렬한다.

코드

function solution(numbers) {
    // 조합 생성
    const combList = [];
    comb(combList, [], 0, numbers.length, 2, 0);
    // 합 배열 생성
    let resultList = [];
    combList.forEach(comb=>{
        resultList.push(numbers[comb[0]]+numbers[comb[1]]);
    })
    // 중복 제거
    resultList = Array.from(new Set(resultList));
    // 오름 차순
    resultList.sort((a,b)=>a-b);
    return resultList;
}

// 조합 배열 생성
function comb(list, arr, idx, n, r, target){
    if (r===0){
        list.push(Object.assign([], arr));
    }else if (target === n){
        return ;
    }else{
        arr[idx] = target;
        comb(list, arr, idx + 1, n, r - 1, target + 1);
        comb(list, arr, idx, n, r, target + 1);
    }
}

복기

  1. 어렵지 않게 풀었다.
  2. 조합, set을 이용한 중복 제거, sort을 이용한 오름 차순 정렬을 사용할 줄 알아야 한다.