가짜 난쟁이 찾기

heyj·2022년 3월 23일
0

Coding Test

목록 보기
7/15
post-thumbnail

7명이었던 난쟁이가 어느날 9명으로 늘어났습니다.
그러나 백설공주는 7명의 난쟁이의 키의 합이 100임을 알고 있습니다. 이 정보를 이용해 가짜 난쟁이를 찾는 문제입니다.

let dwarf = [20, 7, 23, 19, 10, 15, 25, 8, 13];

function fake(arr) {
  let answer = arr;
  return answer;
}

먼저 합을 구해야 합니다. 배열의 합은 reduce로 구할 수 있습니다.

function fake(arr) {
  let answer = arr;
  let sum = arr.reduce((acc, cur) => return acc + cur)
  return answer;
}

전체 키의 합에서 가짜 난쟁이들의 키의 합을 빼주면 100이 되는 것을 이용해 반복문과 조건문을 작성합니다. 진짜 난쟁이 7명을 찾아 반환하는 것으로 조건이 주어졌기 때문에 배열에서 가짜난쟁이들을 각각 삭제해줘야 합니다.

이 때는 splice 메소드를 사용했습니다.
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)
splice 메소드는 start(시작 index)부터 deleteCount만큼 배열을 삭제하고, item1을 삭제된 곳에 끼워넣습니다.

splice(start)
splice(start, deleteCount)
splice(start, deleteCount, item1)

splice 메소드는 지워진 배열값을 담은 배열을 반환합니다.
만약 1개의 요소만 지워졌다면, 그 요소만 담긴 배열이 반환됩니다.
만약 아무것도 지우지 않았다면(array.splice()) 빈 배열이 반환됩니다.

function fake(arr) {
  let answer = arr;
  let sum = arr.reduce((acc, cur) => return acc + cur)
  for (let i = 0; i < arr.length; i++) {
    for (let j = 1; j < arr.length; j++) {
    	if (sum - (arr[i] + arr[j]) === 100) {
        	arr.splice(j, 1)
            arr.splice(i, 1)
        }
    }
  }
  return answer;
}

j인덱스를 먼저 삭제하는 이유는 앞의 i인덱스를 삭제하면
순서가 다시 만들어지기 때문에 엉뚱한 값을 지울 수 있어서 입니다.

0개의 댓글