๐ ๋ฌธ์
Given an integer array nums of length n and an integer target, find three integers in nums such that the sum is closest to target.
Return the sum of the three integers.
๊ธธ์ด๊ฐ n์ธ ์ ์ ๋ฐฐ์ด nums์ ๋ชฉํ๊ฐ ์ ์์ธ ๊ฒฝ์ฐ ํฉ๊ณ๊ฐ ๋ชฉํ์ ๊ฐ์ฅ ๊ทผ์ ํ๋๋ก nums์์ ์ธ ๊ฐ์ ์ ์๋ฅผ ์ฐพ์ผ์์ค.
์ธ ์ ์์ ํฉ์ ๋ฐํํ์์ค.
๋ถ์ฐ ์ค๋ช : ๊ธธ์ด๊ฐ n์ธ ์ ์์ ๋ฐฐ์ด nums๊ฐ ์ฃผ์ด์ง๋ฉด, ๊ทธ ์์์ ํฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ํ์ฌ ์ธ๋ฑ์ค์ ๊ฐ๊ณผ ์ธ์ ํ ์ ์์ ๊ฐ์ ๋ ํ๊ณ , ๋ชฉํ์ ๊ฐ์ฅ ๊ทผ์ ํ ๊ฐ์ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
๐ ์์
Input: nums = [-1,2,1,-4], target = 1
Output: 2
Explanation: The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
Input: nums = [0,0,0], target = 1
Output: 0
Explanation: The sum that is closest to the target is 0. (0 + 0 + 0 = 0).
๐ ํ์ด ์ค๋ช
- ๊ณ์ฐ์ ์ฉ์ดํ๋๋ก ๋ฐฐ์ด์ ์ ๋ ฌํด์ฃผ์๋ค.
- ๋น๊ต๋ฅผ ์ํด 0,1,2 ๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฐ์ ๋ํด์ฃผ์๋ค.
- ์ธ ๊ฐ์ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด์์ i๊ฐ ๋ฐฐ์ด์ ๊ธธ์ด - 2 ๋ณด๋ค ์์ ๋๋ก ํด์ฃผ์๋ค.
public static int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int result = nums[0] + nums[1] + nums[2];
for (int i = 0; i < nums.length - 2; i++) {
}
return result;
}
- ์ธ ์์ ํฉ์ด๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง ๋ ์์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๋ณ์๋ฅผ ์ ์ธํด์ฃผ๊ณ ๊ฐ์ ๋ฃ์ด์ฃผ์๋ค.
- ๋ค์ ๋ฐ๋ณต๋ฌธ์ ์ด๊ณ , ์ธ ์ธ๋ฑ์ค์ ๊ฐ์ ๋ํ ๊ฐ์ด ๋ง์ฝ target๊ณผ ๊ฐ์ผ๋ฉด ํด๋น ๊ฐ์ ๋ฆฌํด์์ผ์ฃผ์๋ค.
- ๋ง์ฝ ๋ํ ๊ฐ์ด target๋ณด๋ค ํฌ๋ฉด ๋ค์์๋ถํฐ ์ธ๊ณ ์๋ right์ ๊ฐ์ ๋ง์ด๋์ค ์์ผ์ฃผ๊ณ
- ๊ทธ๊ฒ ์๋๋ผ๋ฉด left์ ๊ฐ์ ํ๋ฌ์ค ์์ผ์ฃผ์๋ค.
- ๊ทธ๋ฆฌ๊ณ target์ด ์๋์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๊ทผ์ ๊ฐ์ ๊ตฌํด์ผํ๋ค.
- target์์ sum์ ๋บ ์ ๋๊ฐ์ด result๋ฅผ ๋บ ์ ๋๊ฐ๋ณด๋ค ์๋ค๋ฉด, ๋ ๊ทผ์ ํ ์ซ์์ด๊ธฐ ๋๋ฌธ์ result๋ฅผ sum์ผ๋ก ๋ฐ๊ฟ์ฃผ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต๋ฌธ์ด ๋๋๋ฉด result ๊ฐ์ ๋ฆฌํด์์ผ ์ฃผ์๋ค.
public static int threeSumClosest(int[] nums, int target) {
...
for (int i = 0; i < nums.length - 2; i++) {
int left = i + 1;
int right = nums.length - 1;
while (left < right) {
int sum = nums[left] + nums[right] + nums[i];
if (sum == target) {
return sum;
}
if (sum > target) {
right--;
} else {
left++;
}
if (Math.abs(target - sum) < Math.abs(target - result)) {
result = sum;
}
}
}
return result;
}
์ง์ ์ ํ์๋ 3Sum ๋ฌธ์ ์ ๋ณํ์ด์๋ค.
๋๋ถ์ ์กฐ๊ธ ์์ํ๊ฒ ์๊ฐํ ์ ์์๋ ๊ฒ ๊ฐ๋ค.
๐ ์ต์ข ํ์ด
public static int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int result = nums[0] + nums[1] + nums[2];
for (int i = 0; i < nums.length - 2; i++) {
int left = i + 1;
int right = nums.length - 1;
while (left < right) {
int sum = nums[left] + nums[right] + nums[i];
if (sum == target) {
return sum;
}
if (sum > target) {
right--;
} else {
left++;
}
if (Math.abs(target - sum) < Math.abs(target - result)) {
result = sum;
}
}
}
return result;
}โ
'์๊ณ ๋ฆฌ์ฆ > LeetCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 015. 3Sum JAVA (0) | 2023.01.05 |
---|---|
[LeetCode] 014.Longest Common Prefix JAVA (0) | 2023.01.04 |
[LeetCode] 013. Roman to Integer JAVA (0) | 2022.12.30 |
[LeetCode] 011.Container With Most Water JAVA (0) | 2022.12.26 |
[LeetCode] 012. Integer to Roman JAVA (0) | 2022.12.23 |
๋๊ธ