https://www.acmicpc.net/problem/1253
๋ฌธ์
- N๊ฐ์ ์ ์ค์์ ์ด๋ค ์๊ฐ ๋ค๋ฅธ ์ ๋ ๊ฐ์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค๋ฉด ๊ทธ ์๋ฅผ “์ข๋ค(GOOD)”๊ณ ํ๋ค.
- N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ฉด ๊ทธ ์ค์์ ์ข์ ์์ ๊ฐ์๋ ๋ช ๊ฐ์ธ์ง ์ถ๋ ฅํ๋ผ.
- ์์ ์์น๊ฐ ๋ค๋ฅด๋ฉด ๊ฐ์ด ๊ฐ์๋ ๋ค๋ฅธ ์์ด๋ค.
์ ํ์ฌํญ
- N(1 ≤ N ≤ 2,000)
- i๋ฒ์งธ ์ : |Ai| ≤ 1,000,000,000
ํ์ด
์ฒ์์ ๋ ์ค๋ฅธ ํ์ด๋ ์ด์ค for๋ฌธ์ ๋๋ ค ๋ ์์ ํฉ์ ๊ตฌํ๊ณ , ๊ทธ ์๊ฐ ๋ฐฐ์ด์ ์๋์ง ํ์ธํ๋ ๊ฒ์ด์๋ค. ํ์ง๋ง ํ๋ ค์ ๊ฒ์ํ์์ ์ฐพ์๋ณด๋, "N๊ฐ์ ์ ์ค์์ ์ด๋ค ์๊ฐ ๋ค๋ฅธ ์ ๋ ๊ฐ์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค๋ฉด"์ ์กฐ๊ฑด์ ์์ธํ ๋ณด๋ฉด "์ฃผ์ด์ง N๊ฐ์ ์ ์ค์์ '์์ ์ ์ ์ธํ' ๋ค๋ฅธ ๋ ์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค๋ฉด"์ ์๋ฏธ๋ผ๊ณ ํ๋ค.
๊ทธ๋์ ํ์ด๋ฅผ ๋ค์ ์๊ฐํด๋ดค๋ค.
๋ฐฉ๋ฒ1 : 2์ค for๋ฌธ
1. ๋ฐฐ์ด์ ๋ชจ๋ ์๋ฅผ ๋์๊ฐ๋ฉฐ ํฉ์ผ๋ก ๋ํ๋ผ ์๋ผ๊ณ ํ๋ค.
2. ๋๋จธ์ง ๋ ์๋ฅผ ์ด์ค for๋ฌธ์ผ๋ก ์ป๊ณ , ๋ ์์ ํฉ์ ๊ตฌํ๋ค.
3. ๋ ์์ ํฉ์ด ํฉ์ผ๋ก ๋ํ๋ผ ์์ ๊ฐ์์ง ํ์ธํ๋ค.
์ด ํ์ด๋ 3์ค for๋ฌธ์ผ๋ก ์๊ฐ๋ณต์ก๋๊ฐ O(N^3)์ด๋ค. N์ด ์ต๋๋ก 2000์ด๋๊น, ์ต๋ 8,000,000,000(80์ต)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.. ์๊ฐ ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค!
๋ ์๋ฅผ ๊ตฌํ๋ ๋ฐ, O(n^2)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒ์ ๊ทธ ์ดํ๋ก ์ค์ผ ๋ฐฉ๋ฒ์ผ๋ก ํฌํฌ์ธํฐ์ ํด์ฌํ ์ด๋ธ์ด ์๊ฐ์ด ๋ฌ๋ค.
๋ฐฉ๋ฒ2 : ํด์ฌํ ์ด๋ธ
1. ๋ฐฐ์ด์ ๋ชจ๋ ์๋ฅผ ๋์๊ฐ๋ฉฐ ํฉ์ผ๋ก ๋ํ๋ผ ์๋ผ๊ณ ํ๋ค.
2. ํด๋น ์์ ์ธ๋ฑ์ค๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ์๋ฅผ ์ํํ๋ค.
3. HashSet์ (ํ์ ์ - ๋ชฉํ ์)์ ๊ฐ์ ๊ธฐ๋กํ๋ค. ์์ผ๋ก ๊ทธ ์๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
4. ์ํํ๋ฉฐ ๋์ค๋ ์๊ฐ HashSet์ ์๋์ง ํ์ธํ๋ค.
๋ ์๋ฅผ ์ฐพ๋ ๊ณผ์ ์ ๋ฐฐ์ด์ ํ ๋ฒ ์ํํ๋ฏ๋ก O(N)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด์ ๋ชจ๋ ์๋ฅผ ํ์ผ์ผ๋ก ๋์๊ฐ๋ฉฐ ๊ตฌํ๋, ์ด O(N^2)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
ํ์ง๋ง ๋ณ๋๋ก ๊ฐ์ด ํด์ฌ์ ์๋์ง ํ์ธํ๊ณ , ๋ฃ๋ ์ฐ์ฐ O(1)์ด ์ถ๊ฐ๋ก ๋ ๋ค. ์ด๊ฑธ ์ด์ค for๋ฌธ ์์์ ํ๋ ์์ธํ ๋ฐ์ง๋ฉด O(N^2)์ด ์ถ๊ฐ๋ก ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํด์ฌํ ์ด๋ธ์ ๋ง๋๋ ๋ฐ, ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ๋ค.
๋ณดํต ํด์ฌํ ์ด๋ธ์ด ์ ๋ ฌ ๋๋ฌธ์ O(N*logN)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ํฌํฌ์ธํฐ๋ณด๋ค ๋น ๋ฅด๋ค๋ ๊ฒ์ ์๊ณ ์์๊ธฐ ๋๋ฌธ์ ํด์ฌํ ์ด๋ธ๋ก ํ๋ ค๊ณ ํ์ง๋ง, ์ค์ ์ด์ฐจํผ ๋ฐ๊นฅ์์ target์ ์ ํ๋ ๊ฒ ๋๋ฌธ์ ์ถ๊ฐ์ ์ผ๋ก for๋ฌธ์ ๋๋ฆฌ๊ฒ ๋์ด O(N)์ด ์๋, O(N^2)์ ์๊ฐ์ด ์ถ๊ฐ์ ์ผ๋ก ๋ค๊ฒ ๋์๋ค... ์ ๋ ฌ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ด ๋ค์ด๊ฐ๊ธฐ ์ ์งํ๋๊ธฐ ๋๋ฌธ์, ์ด ๋ฌธ์ ์์ ํฌํฌ์ธํฐ๋ฅผ ์ฐ๊ฒ ๋ ๊ฒฝ์ฐ์๋ ์ถ๊ฐ์ ์ผ๋ก O(N*logN)์ด ์๊ฐ์ด ๋ฐ์ํ๊ฒ ๋๋ค. ๋ ํจ์จ์ ์ด๋ค.
๋ฐฉ๋ฒ3 : ํฌํฌ์ธํฐ
1. ํฌ์ธํฐ๋ฅผ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๋์ ๋๊ณ ํ์์ ํ๊ธฐ ์ํด, ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ์ ํ๋ค.
2. ๋ฐฐ์ด์ ๋ชจ๋ ์๋ฅผ ์ฐพ์์ผ ๋ ํฉ(target)์ผ๋ก ์ ํ๋ค.
3. ํฌ์ธํฐ์ ์ผ์ชฝ์ 0์, ์ค๋ฅธ์ชฝ์ N - 1์ ๋๊ณ ํ์์ ์์ํ๋ค.
4. ๋ง์ฝ target์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ค๋ฉด, ๊ทธ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋๋ด๋ค.
5. ๋ ์์ ํฉ target์ด๋ผ๋ฉด, ์นด์ดํธ๋ฅผ ์ฌ๋ ค์ฃผ๊ณ target์ ํด๋นํ๋ ํ์์ ๋๋ธ๋ค.
6. ํฉ์ด target ๋ณด๋ค ํฌ๋ค๋ฉด, ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ ์ค์ฌ์ฃผ๊ณ , ์๋ค๋ฉด, ์ผ์ชฝ ํฌ์ธํฐ๋ฅผ ์ฆ๊ฐ์์ผ์ค๋ค.
7. left < right ์ผ๋๊น์ง ๋ฐ๋ณตํ๋ค.
๋ ์๋ฅผ ์ฐพ๋ ๊ณผ์ ์ ํฌ์ธํฐ๋ฅผ ํ์ฉํด ๋ฐฐ์ด์ ํ ๋ฒ ์ํํ๋ฏ๋ก O(N)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด์ ๋ชจ๋ ์๋ฅผ ํ์ผ์ผ๋ก ๋์๊ฐ๋ฉฐ ๊ตฌํ๋, ์ด O(N^2)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์ถ๊ฐ์ ์ผ๋ก, ํ์ ์ ์ ๋ ฌ ๋๋ฌธ์ O(N*logN)์ด ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
์ฝ๋
ํด์ฌํ ์ด๋ธ
package algorithm;
import java.io.*;
import java.util.*;
public class BOJ_์ข๋ค {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
//๊ตฌํ
int count = 0;
for(int i = 0; i < N; i++) {
int target = arr[i];
HashSet<Integer> set = new HashSet<>();
for(int j = 0; j < N; j++) {
if(i == j) continue;
int diff = target - arr[j];
if(set.contains(arr[j])) {
count++;
break;
}
set.add(diff);
}
}
System.out.println(count);
}
}
ํฌํฌ์ธํฐ
package algorithm;
import java.io.*;
import java.util.*;
public class BOJ_์ข๋ค2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
//๊ตฌํ
Arrays.sort(arr); //์ ๋ ฌ
int count = 0;
for(int i = 0; i < N; i++) {
int target = arr[i];
int left = 0;
int right = N - 1;
while(left < right) {
if(left == i) {
left++;
} else if(right == i) {
right--;
}
if(left == right) continue;
int sum = arr[left] + arr[right];
if(sum == target) {
count++;
break;
} else if(sum > target) {
right--;
} else {
left++;
}
}
}
System.out.println(count);
}
}
๊ฒฐ๊ณผ
์ : ํด์ฌํ ์ด๋ธ ํ์ด
์๋ : ํฌํฌ์ธํฐ ํ์ด
๋ฐฐ์ด์
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 11660๋ฒ : ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ5 (0) | 2024.01.12 |
---|---|
๋ฐฑ์ค 20922๋ฒ : ๊ฒน์น๋ ๊ฑด ์ซ์ด (0) | 2024.01.09 |
๋ฐฑ์ค 16234๋ฒ : ์ธ๊ตฌ ์ด๋ (0) | 2023.09.25 |
๋ฐฑ์ค 1261๋ฒ : ์๊ณ ์คํ (0) | 2023.09.16 |
๋ฐฑ์ค 7785๋ฒ : ํ์ฌ์ ์๋ ์ฌ๋ (0) | 2023.08.30 |