๐๋ ์์ ํฉ
PCCP(์ฝ๋ฉ์ ๋ฌธ์ญ๋์ธ์ฆ)
๋น์ทํ ๋ฌธ์ - ๋ฆฌํธ์ฝ๋ 1๋ฒ
https://leetcode.com/problems/two-sum/description/
๐ก์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ๋ค๋ฅด๊ฒ ํ์ฌ ๋ฌธ์ ํ์ด๋ณด๊ธฐ
โ๋ฌธ์ ์ค๋ช
์ ์ ์์ด ์์์ ์์ด์ ์์ ๋ ๊ฐ์ ํฉ์ด target๊ฐ์ด ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๊ณ ์ถ์ต๋๋ค.
๋งค๊ฐ๋ณ์ nums์ ๊ธธ์ด๊ฐ n์ธ ์์ด์ด ์ฃผ์ด์ง๊ณ , ๋งค๊ฐ๋ณ์ target์ ์์ฐ์ ๊ฐ์ด ์ฃผ์ด์ง๋ฉด ์ด ์์ด์์์ ๋ ๊ฐ์ ์์์ ํฉ์ด ์ ์ target๊ฐ์ด ๋๋ ๋ ์์๋ฅผ ๊ตฌํด ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ด์ ๋ฐํํฉ๋๋ค.
๋ ๊ฐ์ ์์์ ํฉ์ด target๊ฐ์ด ๋๋ ๊ฒฝ์ฐ๋ ์ค์ง ํ๊ฐ์ง ๋ฟ์ธ ์
๋ ฅ๋ง ์ฃผ์ด์ง๋๋ค. ํ ์์๋ฅผ ๋ ๋ฒ ๋ํ๋ ๊ฒ์ ์๋ฉ๋๋ค. nums์ ๊ฐ ์์๋ ์ ์ผ๊ฐ์
๋๋ค.
๋ต์ด ์์ ๊ฒฝ์ฐ [0, 0]์ ๋ฐํํฉ๋๋ค.
โ์ ์ถ๋ ฅ ์
โ์ ํ์ฌํญ
- nums์ ๊ธธ์ด 3 <= n <= 100,000
- ๋ฐฐ์ด nums์ ์์๋ ์ ์์ ๋๋ค. -10,000 <= nums[i] <= 10,000
- -20,000 <= target <= 20,000
โ๏ธ ๋ฒ ์ด์ค ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import java.util.*;
class Solution {
public int[] solution(int[] nums, int target){
int[] answer = new int[2];
return answer;
}
public static void main(String[] args){
Solution T = new Solution();
System.out.println(Arrays.toString(T.solution(new int[]{3, 7, 2, 12, 9, 15, 8}, 12)));
System.out.println(Arrays.toString(T.solution(new int[]{21, 12, 30, 15, 6, 2, 9, 19, 14}, 24)));
System.out.println(Arrays.toString(T.solution(new int[]{12, 18, 5, 8, 21, 27, 22, 25, 16, 2}, 28)));
System.out.println(Arrays.toString(T.solution(new int[]{11, 17, 6, 8, 21, 9, 19, 12, 25, 16, 2}, 26)));
System.out.println(Arrays.toString(T.solution(new int[]{7, 5, 12, -9, -12, 22, -30, -35, -21}, -14)));
System.out.println(Arrays.toString(T.solution(new int[]{7, 5, 12, 20}, 15)));
}
}
|
cs |
๐ช ํ์ด๋ฒ 1 - ์๊ฐ ๋ณต์ก๋ : O(N^2) ๊ณต๊ฐ ๋ณต์ก๋ : O(1)
์ด์ค for๋ฌธ์ ์ฌ์ฉํ O(N^2) ํ์ด๋ฒ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import java.util.*;
class Solution {
public int[] solution(int[] nums, int target){
int[] answer = new int[2];
for (int i = 0; i < nums.length - 1; i++) {
for (int y = i + 1; y < nums.length; y++) {
if (nums[i] + nums[y] == target) {
if (nums[i] > nums[y]) {
answer[0] = nums[y];
answer[1] = nums[i];
} else {
answer[0] = nums[i];
answer[1] = nums[y];
}
break;
}
}
}
return answer;
}
public static void main(String[] args){
Solution T = new Solution();
System.out.println(Arrays.toString(T.solution(new int[]{3, 7, 2, 12, 9, 15, 8}, 12)));
System.out.println(Arrays.toString(T.solution(new int[]{21, 12, 30, 15, 6, 2, 9, 19, 14}, 24)));
System.out.println(Arrays.toString(T.solution(new int[]{12, 18, 5, 8, 21, 27, 22, 25, 16, 2}, 28)));
System.out.println(Arrays.toString(T.solution(new int[]{11, 17, 6, 8, 21, 9, 19, 12, 25, 16, 2}, 26)));
System.out.println(Arrays.toString(T.solution(new int[]{7, 5, 12, -9, -12, 22, -30, -35, -21}, -14)));
System.out.println(Arrays.toString(T.solution(new int[]{7, 5, 12, 20}, 15)));
}
}
|
cs |
๐ช ํ์ด๋ฒ 2 - ์๊ฐ ๋ณต์ก๋ : O(NlogN) ๊ณต๊ฐ ๋ณต์ก๋ : O(1)
Arrays.sort()๋ฅผ ์ฌ์ฉํ์ฌ (O(NlogN) ) ๋ฐ๋ณต๋ฌธ์ ํ ๋ฒ ์ฌ์ฉํ์ฌ ํ์ด
ํฌํฌ์ธํฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import java.util.*;
class Solution {
public int[] solution(int[] nums, int target){
int[] answer = new int[2];
Arrays.sort(nums);
int smallIdx = 0;
int bigIdx = nums.length - 1;
while (smallIdx < bigIdx) {
if (nums[smallIdx] + nums[bigIdx] == target) {
answer[0] = nums[smallIdx];
answer[1] = nums[bigIdx];
break;
} else if (nums[smallIdx] + nums[bigIdx] > target) {
bigIdx--;
} else {
smallIdx++;
}
}
return answer;
}
public static void main(String[] args){
Solution T = new Solution();
System.out.println(Arrays.toString(T.solution(new int[]{3, 7, 2, 12, 9, 15, 8}, 12)));
System.out.println(Arrays.toString(T.solution(new int[]{21, 12, 30, 15, 6, 2, 9, 19, 14}, 24)));
System.out.println(Arrays.toString(T.solution(new int[]{12, 18, 5, 8, 21, 27, 22, 25, 16, 2}, 28)));
System.out.println(Arrays.toString(T.solution(new int[]{11, 17, 6, 8, 21, 9, 19, 12, 25, 16, 2}, 26)));
System.out.println(Arrays.toString(T.solution(new int[]{7, 5, 12, -9, -12, 22, -30, -35, -21}, -14)));
System.out.println(Arrays.toString(T.solution(new int[]{7, 5, 12, 20}, 15)));
}
}
|
cs |
๐ช ํ์ด๋ฒ 3 - ์๊ฐ ๋ณต์ก๋ : O(N) ๊ณต๊ฐ ๋ณต์ก๋ : O(N)
๊ณต๊ฐ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ ๋์ ๋ฐ๋ณต๋ฌธ์ ํ๋ฒ ์ฌ์ฉํ์ฌ ๋ฌธ์ ํ๊ธฐ
HashMap ์ฌ์ฉ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
import java.util.*;
class Solution {
public int[] solution(int[] nums, int target){
HashMap<Integer, Integer> map = new HashMap<>();
int[] answer = new int[2];
for (int x : nums) {
int y = target - x;
if (map.containsKey(y)) {
if (x > y) {
answer[0] = y;
answer[1] = x;
} else {
answer[0] = x;
answer[1] = y;
}
break;
} else {
map.put(x, 1);
}
}
return answer;
}
public static void main(String[] args){
Solution T = new Solution();
System.out.println(Arrays.toString(T.solution(new int[]{3, 7, 2, 12, 9, 15, 8}, 12)));
System.out.println(Arrays.toString(T.solution(new int[]{21, 12, 30, 15, 6, 2, 9, 19, 14}, 24)));
System.out.println(Arrays.toString(T.solution(new int[]{12, 18, 5, 8, 21, 27, 22, 25, 16, 2}, 28)));
System.out.println(Arrays.toString(T.solution(new int[]{11, 17, 6, 8, 21, 9, 19, 12, 25, 16, 2}, 26)));
System.out.println(Arrays.toString(T.solution(new int[]{7, 5, 12, -9, -12, 22, -30, -35, -21}, -14)));
System.out.println(Arrays.toString(T.solution(new int[]{7, 5, 12, 20}, 15)));
}
}
|
cs |
๋๊ธ