일곱난쟁이

Bard·2022년 1월 28일
0

알고리즘

목록 보기
3/6

문제

백설공주가 일과를 마치고 돌아와보니 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.
아홉 명의 난쟁이는 모두 자신이 "백성 공주와 일곱 난쟁이"의 주인공이라고 주장한다.
일곱 난쟁이를 구하라.

  • 일곱 난쟁이의 키의 합이 100
  • 아홉 명의 난쟁이의 키는 배열로 주어짐
function solution(arr) {
    let answer = arr;
	// reduce 를 활용해서 아홉 명의 난쟁이의 키의 합을 구함
    const sum = arr.reduce((a, b) => a + b);
	// for 문 최적화
    const length = arr.length;
  	// 이중 반복문을 활용해 범인이 두 명인 상황을 모두 접근
    for(let i = 0;i < length-1; i++) {
        for(let j = i + 1; j < length; j++) {
            const criminal1 = arr[i];
            const criminal2 = arr[j];
          	// 범인 확인
          	// 난쟁이들 키의 합 - (범인1 + 범인2) = 100 이 참인 경우
            if(sum - (criminal1 + criminal2) === 100) {
              	// splice 로 특정 인덱스 하나씩 범인 제거
              	// j를 먼저 사용한 이유는 
                arr.splice(j, 1);
                arr.splice(i, 1);
            }
            
        }
    }
    return answer;
}

let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
console.log(solution(arr));

후기

처음에는 일곱 난쟁이들의 키의 합이 100이라는 문구를 확인하고 7개를 더해서 100이 나오는 것을 찾아야지 라는 생각을 했다..😭
다행히 금방 정신을 차려 난쟁이들 키의 합 - (범인1 + 범인2) = 100 이 참인 경우 으로 생각을 바꾸고 이중 반복문을 사용

profile
영차영차🐢

0개의 댓글