プログラマーlv 1回答:2つ抜いて追加


7月26日アルゴリズムの問題を解く
プログラマーlv 1回答:2つ抜いて追加

問題の説明


整数配列番号.numbersから異なるインデックスの2つの数を抽出し、作成できるすべての数を昇順に配列に入れ、solution関数の戻りを完了してください.

せいげんじょうけん

  • numbersの長さは2または100より大きい.
  • numbersのすべての数字は0または100以下です.
  • I/O例


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

    I/O例説明


    I/O例#1
  • 2=1+1.(1この数字には2つあります)
  • 3=2+1.
  • 4=1+3.
  • 5=1+4=2+3.
  • 6=2+4.
  • 7=3+4.
  • です  [2,3,4,5,6,7]  返さなければなりません.
  • I/O例#2
  • 2=0+2.
  • 5=5+0.
  • 7=0+7=5+2.
  • 9=2+7.
  • 12=5+7.
  • です  [2,5,7,9,12]  返さなければなりません.
  • 説明する

    function solution(numbers) {
        let answer = [];
        
        // [1,2,3,4]  =  [1,2],[1,3], [1,4] 
        //               [2,3],[3,4]
        //               [3,4]
        
        for(let i=0; i<numbers.length; i++){
            for(let j=i+1; j<numbers.length; j++){
                let sum = numbers[i]+numbers[j];
                // i번째와 i+1번째의 수를 더한것을 배열에 푸시한다
                // 대신 이미 그 숫자가 있다면 푸시하지 않는다.
                if(answer.includes(sum)===false){
                    answer.push(sum);                    
                }                     
            }
        }
        
        // 배열 오름차순으로 정렬
        answer.sort(function(a, b) { 
            return a - b;
        });
        
        return answer;
    }
    
    // 아래는 예시를 수도코드로 작성함.
    
    // [1,2,3,4]
    // [1,2], [1,3], [1,4]
    // [2,3], [2,4]
    // [3,4]
    
    // 1,2
    // 1,3
    // 1,4
    
    // 2,1
    // 2,3
    // 2,4
    
    // 3,1
    // 3,2
    // 3,4
    
    // 4,1
    // 4,2
    // 4,3
    
    // 3,4,5
    // 5,6
    // 7