Algorism
두 수 최대 합
자라나라나무나무나
2022. 7. 21. 18:12
수열이 주어질 때 두개의 수를 선택하여 최대 합이 나올 수 있도록 하여라.
[-11, 5, 18, -2, -3, 6, 4, 17, 10, 9],
[3, 7, -14, 2, -6, 13, -20, -2, -7, 6, -17, -5, 14, -9, 19],
[-15, -4, -8, 12, 12, -8, -8, 9, 10, 15, -2, 10, -14, 2, 13, 19, -9, 3, -18, 14]
정답1
function answer(nums) {
let result = [];
let arr = nums.sort((a,b) => b - a);
// console.log(arr);
let i = 0;
for(let i=0; i < 2; i++) {
result[i] = arr[i];
}
return result;
}
let input = [
[-11, 5, 18, -2, -3, 6, 4, 17, 10, 9],
[3, 7, -14, 2, -6, 13, -20, -2, -7, 6, -17, -5, 14, -9, 19],
[
-15, -4, -8, 12, 12, -8, -8, 9, 10, 15, -2, 10, -14, 2, 13, 19, -9, 3, -18,
14,
],
];
for (let i = 0; i < input.length; i++) {
process.stdout.write(`#${i + 1} `);
console.log(answer(input[i]));
}
정답2
function answer(nums) {
let result = [];
result = nums[0] > nums[1] ? [nums[0], nums[1]] : [nums[1], nums[0]];
for (let i = 2; i < nums.length; i++) {
if (nums[i] > result[0]) {
result[1] = result[0];
result[0] = nums[i];
} else if (nums[i] > result[1]) {
result[1] = nums[i];
}
}
return result;
}
let input = [
[-11, 5, 18, -2, -3, 6, 4, 17, 10, 9],
[3, 7, -14, 2, -6, 13, -20, -2, -7, 6, -17, -5, 14, -9, 19],
[
-15, -4, -8, 12, 12, -8, -8, 9, 10, 15, -2, 10, -14, 2, 13, 19, -9, 3, -18,
14,
],
];
for (let i = 0; i < input.length; i++) {
process.stdout.write(`#${i + 1} `);
console.log(answer(input[i]));
}
result = nums[0] > nums[1] ? [nums[0], nums[1]] : [nums[1], nums[0]];
nums의 0번째와 1번째의 위치를 고정시키기 위해서 idx 0이 1보다 크면 [nums[0], nums[1]] 이고 아니면 [nums[1], nums[0]]로 위치를 바꾸어라
for (let i = 2; i < nums.length; i++) {
if (nums[i] > result[0]) {
result[1] = result[0]; // value shift
result[0] = nums[i];
} else if (nums[i] > result[1]) {
result[1] = nums[i];
}
}
함수를 실행하게 되면 제일 먼저 nums[0] 과 nums[1]을 비교하여 임의로 숫자를 넣어 놓고 이제 배열 안의 숫자비교를 통하여 숫자를 result에 넣는다.
: nums[i]가 result[0]보다 크면 result[0]은 result[1]자리로 한칸 물러나게 된다.
그리고 다시 반복되는 수와 비교하게 된다.