Algorism
배열의 element들의 값이 많을 때, 정해진 합 구하기
자라나라나무나무나
2022. 7. 22. 16:59
배열에는 9개의 숫자가 있다.
7개의 숫자의 합이 100이되게하는 프로그램을 만들어라.
배열의 값은 100 이하 자연수이며, 값을 순서대로 배열에 넣어 반환한다.
function answer(dwarf) {
let result = [];
// 1. 9명(배열 총 합) = 7명(100) + 2명(faker 합)
// 9명 - 7명 = 2명에 대한 합 숫자
let sum = 0;
for (let i = 0; i < dwarf.length; i++) {
sum += dwarf[i];
}
sum -= 100; // -> faker 2명에 대한 배지값
// 2. for 두 요소의 합이 faker 2명에 대한 합 숫자과 같은지 비교 -> i, j
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;
}
let input = [
[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],
];
for (let i = 0; i < input.length; i++) {
process.stdout.write(`#${i + 1} `);
console.log(answer(input[i]));
}
헷갈렸던 3번 부분 풀이
faker 두명의 합을 구해놨기 때문에 나머지 7개의 합이 100인 숫자들을 result에 넣어주면 된다.
dwarf 길이 만큼의 반복문을 돌린다.
if (faker[0] != i && faker[1] != i) 인 이유는
faker에는 2개의 element가 있다 그렇기 때문에 faker[0] 과 faker[1]인 것이고
이 반복문은 faker가 없이 result값에 7개의 숫자를 넣어야하기 때문에 i자체가 못 들어가게 만들어 놓은 것이다.
result[count++] = dwarf[i]
count와 i는 같이 증가하기 때문에 7개의 값이 들어간 배열이 return되게 된다.