✏️ 문제

수열이 주어질 때, 이 중 두 개의 수를 선택하여 최대 합이 나올수 있도록 프로그램을 제작하시오.
입력은 정수로 된 배열을 받고, 최대 합이 나올 수 있는 두 수를 배열 형태로 반환한다.
배열로 입력되는 정수는 10 ~ 20개 사이이며, 정수의 범위는 -20 ~ +20 사이의 값이 입력된다.
입력값

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

📝 풀이

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

  // 1. 최대값, 2번째 최대값 찾기
  // Result[0]에 첫번째 최대값, [1]에 두번째 최대값
  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]; // 구한 높은 값 저장[value shift]
      result[0] = nums[i];
    } else if (nums[i] > result[1]) {
      result[1] = nums[i]
    }
  }

  return result;
}
  1. result에 인덱스 0번과 1번을 먼저 세팅을 한 후 시작(삼항 연산자로 먼저 0번, 1번을 비교하고 시작함 그래서 for문 초기값을 2로 시작)
  2. for문으로 만약 nums[i] 가 result[0] 보다 클 경우 기존의 result[1]에 shift해준다.
  3. 그 후 result[0]의 값에 nums[i]를 넣어준다.
  4. 만약 nums[i]가 result[1]보다 클 경우, result[1]에 nums[i]를 넣어준다.
profile
#UXUI #코린이

0개의 댓글