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]자리로 한칸 물러나게 된다.

그리고 다시 반복되는 수와 비교하게 된다.