양끝 숫자쌍 중 가장 큰 합
자바스크립트 코딩테스트 문제로 mirror-scan 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.
정수 배열 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
- 쌍:
힌트
- 왼쪽 끝 인덱스와 오른쪽 끝 인덱스를 하나씩 움직여 보세요.
- 쌍의 합을 계산할 때마다 현재 최댓값을 갱신하면 됩니다.
- 가운데 원소 하나만 남는 경우를 놓치지 마세요.
해설
이 문제는 배열의 양끝을 동시에 확인하는 방식으로 풀 수 있습니다.
- 왼쪽 포인터를
0, 오른쪽 포인터를nums.length - 1에서 시작합니다. nums[left] + nums[right]를 계산합니다.- 지금까지 구한 최댓값과 비교해 더 큰 값을 저장합니다.
left는 1 증가,right는 1 감소시킵니다.- 두 포인터가 만나거나 지나갈 때까지 반복합니다.
홀수 길이 배열에서는 가운데 원소에서 left === right가 됩니다. 이때는 같은 원소를 두 번 더한 값 nums[left] * 2를 비교하면 됩니다.
배열을 한 번만 훑으면 되므로 시간 복잡도는 O(n)입니다.
코드 작성
starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.
JavaScript
에디터 로딩 중...
커스텀 테스트
함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]
아직 실행하지 않았습니다.
실행 결과
아직 실행하지 않았습니다.
예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.
댓글
문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.