양끝 숫자쌍 중 가장 큰 합

자바스크립트 코딩테스트 문제로 mirror-scan 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.

today easy mirror-scan 함수명: solution 제한 시간: 200ms

정수 배열 nums가 주어질 때, 맨 앞 수와 맨 뒤 수를 한 쌍으로 묶고 그 합을 구합니다. 그다음 두 번째 수와 뒤에서 두 번째 수도 같은 방식으로 묶습니다. 이렇게 만든 쌍들 중 가장 큰 합을 반환하는 solution 함수를 작성하세요.

배열 길이가 홀수라서 가운데 수가 하나 남으면, 그 수는 자기 자신과 짝을 이룬 것처럼 두 번 더합니다.

제한사항

  • nums의 길이는 1 이상 100,000 이하입니다.
  • nums의 각 원소는 0 이상 1,000 이하의 정수입니다.
  • 반환값은 만들어진 쌍들 중 가장 큰 합입니다.

예시

  • 입력: [3, 8, 1, 5] → 출력: 9
    • 쌍: (3, 5), (8, 1)
    • 합: 8, 9
    • 가장 큰 합: 9
  • 입력: [4, 2, 9, 7, 6] → 출력: 18
    • 쌍: (4, 6), (2, 7), (9, 9)
    • 합: 10, 9, 18
    • 가장 큰 합: 18

힌트

  • 왼쪽 끝 인덱스와 오른쪽 끝 인덱스를 하나씩 움직여 보세요.
  • 쌍의 합을 계산할 때마다 현재 최댓값을 갱신하면 됩니다.
  • 가운데 원소 하나만 남는 경우를 놓치지 마세요.

해설

이 문제는 배열의 양끝을 동시에 확인하는 방식으로 풀 수 있습니다.

  1. 왼쪽 포인터를 0, 오른쪽 포인터를 nums.length - 1에서 시작합니다.
  2. nums[left] + nums[right]를 계산합니다.
  3. 지금까지 구한 최댓값과 비교해 더 큰 값을 저장합니다.
  4. left는 1 증가, right는 1 감소시킵니다.
  5. 두 포인터가 만나거나 지나갈 때까지 반복합니다.

홀수 길이 배열에서는 가운데 원소에서 left === right가 됩니다. 이때는 같은 원소를 두 번 더한 값 nums[left] * 2를 비교하면 됩니다.

배열을 한 번만 훑으면 되므로 시간 복잡도는 O(n)입니다.

코드 작성

starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.

JavaScript 에디터 로딩 중...

커스텀 테스트

함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]

아직 실행하지 않았습니다.

실행 결과

아직 실행하지 않았습니다.

예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.

댓글

문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.