정수 배열 nums와 정수 m이 주어져요. 서로 다른 세 개의 원소를 골라 더했을 때, m을 넘지 않으면서 가장 큰 합을 반환해요.
그런 조합이 하나도 없으면 -1을 반환해요.
원소가 100개까지라 세 개를 고르는 모든 경우는 최대 16만 가지 남짓이에요. 영리한 방법을 찾기 전에, 모든 경우를 만들어 보는 코드부터 정확히 쓰는 것이 이 문제의 목적이에요.
예시
예시 1
예시 2
예시 3
제한 사항
- 3 ≤ nums.length ≤ 100
- 1 ≤ nums[i] ≤ 100,000
- 1 ≤ m ≤ 300,000
- 같은 인덱스를 두 번 고를 수 없어요. 값이 같은 원소가 여러 개 있는 것은 괜찮아요.
인덱스
i < j < k 로 삼중 반복문을 돌면 같은 조합을 두 번 세지 않아요. for j = i + 1, for k = j + 1 로 시작하는 것이 요령이에요. 답을 담을 변수는 -1로 초기화해 두면 '없음' 처리가 저절로 돼요.javascriptCopy codefunction threeSum(nums, m) {let best = -1;for (let i = 0; i < nums.length; i++) {for (let j = i + 1; j < nums.length; j++) {for (let k = j + 1; k < nums.length; k++) {const sum = nums[i] + nums[j] + nums[k];if (sum <= m && sum > best) best = sum;}}}return best;}
예시 테스트만 실행 (Cmd/Ctrl+Enter)
숨김 테스트까지 채점 (Cmd/Ctrl+Shift+Enter)
에디터를 불러오고 있어요…
코드를 작성하고Ctrl↵를 눌러 예시 테스트를 확인해 보세요.