반응형
1. 문제
- 정수 배열 nums와 k가 주어질 때, 두 요소의 합이 k가 되는 경우 연산 횟수를 반환하라.
2. 해결
function maxOperations(nums: number[], k: number): number {
nums.sort((a,b) => a-b)
let left = 0, right = nums.length-1;
let ans = 0;
while(left < right) {
const sum = nums[left] + nums[right];
if(sum === k) {
ans++;
left++;
right--;
} else if(sum < k) {
left++;
} else {
right--
}
}
return ans;
};
- 정수 배열 요소의 합을 투 포인터로 관리하기 위해선, 정렬이 필요하다. (그래야 left를 옮길지 right를 옮길지 정하니까)
- 합이 k와 같으면 연산횟수가 증가하고, 두 포인터를 좁힌다.
- 합이 k보다 작으면 left의 값을 증가시킨다.
- 합이 k보다 크면 right의 값을 감소시킨다.