
오름차순 정렬된 배열 하나와 target이 주어진다.
배열의 값들을 더해서 target을 구해야하는데
이 때 인덱스를 배열에 담아 리턴하면 된다.
투포인터를 이용하여 문제를 해결한다.
배열이 정렬되어있기 때문에 두 값을 더한 결과가 크거나, 작거나, 같은 경우로 나누어서 인덱스를 조절했다.
왼쪽 인덱스의 시작 값은 0
오른쪽 인덱스의 시작 값은 (길이 -1).
같다면 정답을 찾았기 때문에 반복문을 종료한다.
덧셈이 target보다 작다면 값이 부족하기 때문에 왼쪽 인덱스를 하나 올려준다.
덧셈이 target보다 크다면 값이 넘치기 때문에 오른쪽 인덱스를 하나 내려준다.
정렬되어 있지 않다면 해당 로직은 성립하지 않는다.
투포인터를 처음 접하기 좋은 기본 문제라는 느낌이 들어서 크게 어려운 부분이 없었다. 다만 너무 쉽다보니 시간복잡도와 공간복잡도를 더 줄이는 아이디어가 떠오르지 않는다.
public int[] twoSum(int[] numbers, int target) {
int leftIndex = 0;
int rightIndex = numbers.length - 1;
while (leftIndex < rightIndex) {
int sum = numbers[leftIndex] + numbers[rightIndex];
if (sum == target) break;
if (sum < target) {
leftIndex++;
} else {
rightIndex--;
}
}
return new int[]{leftIndex + 1, rightIndex + 1};
}
