✏️ 문제

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

[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]

📝 풀이

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

  // 1. 9명(배열 총 합) = 7명 + 2명(faker합)
  // 9명 - 7명 = 2명에 대한 합의 숫자
  let sum = 0; // 9명 배열 총 값 담기
  for (let i = 0; i < dwarf.length; i++) {
    sum += dwarf[i]; // 9명의 값
  }
  sum -= 100; // faker 두명의 값

  // 2.for 두 요소의 합이 faker 2명에 대한 합 숫자와 같은지 비교 
  let faker = [];
  for (let i = 0; i < dwarf.length; i++) {
    for (let j = i + 1; j < dwarf.length; j++) {
      if (sum == dwarf[i] + dwarf[j]) {
        faker[0] = i;
        faker[1] = j;
        break;
      }
    }

    if (faker.length != 0) break;
  }

  // 3. faker 두명을 제외하고 나머지 뱃지 값을 result에 넣어준다.
  let count = 0;
  for(let i = 0; i < dwarf.length; i++) {
    if (faker[0] != i && faker[1] != i) {
      result[count++] = dwarf[i]
    }
  }

  return result;
}
  1. 9명 중 2명이 faker 난쟁이 이고 faker 값을 구하는 방법은 총합(9명) - 100을 한 뒤 2명의 가짜 난쟁이의 합의 숫자를 구한다.
  2. sum에 9명의 총 배열의 값을 담아준다.
  3. 총합 - 100을 하여 faker 두명의 값을 구해준다.
  4. 이중 for문으로 두 요소의 합이 faker 2명에 대한 합 숫자와 같은지 비교해준다.
  5. faker 두명을 제외한 나머지 뱃지 값을 result에 넣어준다.
profile
#UXUI #코린이

0개의 댓글