일터에 나갔더 난쟁이 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;
}
- 9명 중 2명이 faker 난쟁이 이고 faker 값을 구하는 방법은 총합(9명) - 100을 한 뒤 2명의 가짜 난쟁이의 합의 숫자를 구한다.
- sum에 9명의 총 배열의 값을 담아준다.
- 총합 - 100을 하여 faker 두명의 값을 구해준다.
- 이중 for문으로 두 요소의 합이 faker 2명에 대한 합 숫자와 같은지 비교해준다.
- faker 두명을 제외한 나머지 뱃지 값을 result에 넣어준다.