๋ฌธ์ ํ์
๋น ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๋ ์ ์ ๋ฐฐ์ด numbers
๊ฐ ์ฃผ์ด์ง๋ค.
๋ฐฐ์ด์์ target
๊ฐ์ ๋ง๋ค ์ ์๋ ๊ฐ 2๊ฐ๋ฅผ ์ฐพ์, ํด๋น ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํด์ผํ๋ค. ( index1 < index2
)
ํ์ด
1๏ธโฃ ํฌ ํฌ์ธํฐ ๋ฐฉ์
๐ก ๋ ์ค๋ฅธ Idea
์ธ๋ฑ์ค0
๋ถํฐ ์์ํ๋left
์ ๋ฐฐ์ด์ ๋์์ ์์ํ๋right
ํฌ์ธํฐ๋ฅผ ์ ์ํ ๋ค,
๋ ๊ฐ์ ํฉ์ดtarget
๋ณด๋ค ํฌ๋ฉดright
ํฌ์ธํฐ๋ฅผ ๊ฐ์์ํค๊ณtarget
๋ณด๋ค ์์ผ๋ฉดleft
๋ฅผ ์ฆ๊ฐ์ํค๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉด ๋ ๊ฒ์ด๋ผ ํ๋จํ๋ค.
์๋ํ๋ฉด, ๋น ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๊ณ ์ ๋ต์ด ๋ฌด์กฐ๊ฑด ์กด์ฌํ๋ ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๊ฐ๋ณต์ก๋๋ O(N) ์ผ๋ก ํด๊ฒฐํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left = 0, right = numbers.length - 1;
while (left < right) {
int sum = numbers[left] + numbers[right];
if (sum > target) {
right--;
} else if (sum == target) {
break;
} else {
left++;
}
}
return new int[]{left + 1, right + 1};
}
}
Medium ๋ฌธ์ ์น๊ณ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์์๋ค.
๊ฒฐ๊ณผ
2๏ธโฃ ์ด๋ถํ์ ํ์ด
๐ก ๋ ์ค๋ฅธ Idea
๋ฐฐ์ด์ ์ํํ๋ฉด์ ํ๋์ ๊ฐ์ ๊ณ ์ ์ผ๋ก ๋๊ณ , ๊ทธ ์ดํ์ ๊ฐ๋ค ์ค์์ ๋ํ์ ๋target
์ด ๋๋ ๊ฐ์ ์ด๋ถํ์์ผ๋ก ์ฐพ์ผ๋ฉด ๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๋ฐฐ์ด์ ๊ธธ์ด๋ ์ต๋ 30000 ์ด๊ธฐ ๋๋ฌธ์, ์๊ฐ ๋ณต์ก๋ O(NlogN) ์ผ๋ก ์ถฉ๋ถํ ํต๊ณผํ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐ์ด ๋ค์๊ธฐ ๋๋ฌธ์ด๋ค.
class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] ans = null;
for (int i = 0; i < numbers.length; i++) {
int fixed = numbers[i];
int find = target - fixed;
int result = bs(numbers, i + 1, find);
if (result != -1) {
ans = new int[]{i + 1, result + 1};
}
}
return ans;
}
private int bs(int[] numbers, int start, int target) {
int left = start, right = numbers.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (target < numbers[mid]) {
right = mid - 1;
} else if (target == numbers[mid]) {
return mid;
} else {
left = mid + 1;
}
}
return -1;
}
}
i
๋ฒ์งธ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก, ๋ํ์ ๋ target
์ด ๋๋ ์๋ฅผ i+1
๋ฒ์งธ ๋ถํฐ ์ด๋ถ ํ์ํ๋ ๋ฐฉ์์ด๋ค.
๊ฒฐ๊ณผ
์๊ฐ๋ณต์ก๋๋ ์์ํ๋๋ก ํต๊ณผํ ์ ์์๋ค.
๐ ํ๊ณ
์ด๋ถ ํ์ ํ์ด๋ฅผ ๋์ ํด์ ๊ตฌํํด๋ดค๋๋ฐ, ํต๊ณผ๋์ด์ ๋ฟ๋ฏํ๋ค.
๋ํ, ๋ค๋ฅธ ์ ํ ์ ๊ทผ๋ฒ์ ํ์ฉํจ์ผ๋ก์ ์์ฉ๋ ฅ์ด ์ฌ๋ผ๊ฐ ๊ธฐ๋ถ์ด์๋ค.
ํ๋์ ๋ฌธ์ ๋ฅผ ๋ค์ํ ์ ๊ทผ๋ฒ์ผ๋ก ์๋ํ๋ ๋ ธ๋ ฅ์ ์์ผ๋ก๋ ํด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.