[JS 문제풀이] 배열-일곱 난장이

rlorxl·2022년 2월 15일
0

문제

일터네 나갔던 난장이 9명이 와서는 모두 자기가 일곱 난장이 중 하나라고 우기고 있다. 모든 난장이의 가슴에는 숫자가 표시된 배지가 있는데, 다행히도 일곱 난장이의 배지에 표시된 숫자의 합이 100이라는 단서로 일곱 난장이를 분별할 수 있다. 일곱 난장이를 분별하는 프로그램을 작성하시오. 일곱 난장이의 배지 값을 기존 순서대로 배열에 넣어 반환한다.

let input4 = [
    [1,5,6,7,10,12,19,29,33],
    [25,23,11,2,18,3,28,6,37],
    [3,37,5,36,6,22,19,2,28],
];

풀이

  1. 모든 번호를 더하고 100을 뺀 값을 구한다. (= 나머지 두 번호의 합)
  2. 가짜 번호가 들어갈 빈 배열(faker)을 만들고 입력 값(난장이 번호)의 첫번째, 두번째 인덱스를 비교해서 1번의 값이 나오면 배열에 추가한다.
  3. 기존 배열과 faker배열을 비교해서 faker에 없는 수만 result에 추가한다.

코드

function answer(dwarf){
    let result = [];
    let sum = 0;

    for(let x of dwarf){
        sum += x;
    }
    sum -= 100;
    
    let faker = [];
    for(let i = 0; i < dwarf.length; i++){
        for(let j = i+1; j < dwarf.length; j++){
            if(dwarf[i] + dwarf[j] == sum) {
                faker[0] = i;
                faker[1] = j;
                break;
            }
        }
        if(faker.length != 0) break;
    }
    
    let count = 0;
    for(let i = 0; i < dwarf.length; i++){
        if(faker[0] != i && faker[1] != i){
            result[count++] = dwarf[i];
        }
    }

    return result;
}

0개의 댓글