ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ?
์ ๋ ฌ๋์ด ์๋ ๋ฐฐ์ด์์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ด๊ฒ ์ ์ข๋๋ฉด, ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ ์์ฒด๊ฐ O(logN)์ ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ์๊ฐ ์ด๊ณผ๋ฅผ ๋ง๊ธฐ ์ํ ํจ์จ์ ์ธ ์๋จ ์ค ํ๋์ด๋ค.
์ผ๋ฐ์ ์ธ ์๋ฐ ์ ๋ ฌ์ ๊ฒฝ์ฐ(Arrays.sort())์๋ O(nlogN)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, ์ ๋ ฌ๊ณผ ํฌ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ๋งํ ์ํฉ์ธ ์ง ์ ๊ฒํ ํ์๊ฐ ์๋ค.
1. ์ ๋ ฌ์ด ๋์ด ์๋๊ฐ?
ํฌ ํฌ์ธํฐ๋ ์ ๋ ฌ๋ ๊ฒฝ์ฐ์ ๊ฐ์ฅ ํจ์จ์ ์ด๋ค. ๋ง์ฝ ๋์ด์์ง ์๋ค๋ฉด, ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉ์ํจ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
2. ๋ฌธ์ ์์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ ๊ฒ์ ์ํ๋๊ฐ?
์ ์กฐ๊ฑด์ ๋ง์กฑ์ํจ๋ค๊ณ ํ์ ๋, ํฌ๊ธฐ๋ฅผ ์๋ก ๋น๊ตํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ํจ์จ์ ์ด๋ค.

์์ ๋ฌธ์ ์ ์ฉ ๋ฐฉ๋ฒ
๋ฐฑ์ค 1253๋ฒ ๋ฌธ์ ์์ ํฌ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฌธ์ ์ ๋ํด ๊ถ๊ธํ๋ค๋ฉด, ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฝ์ด๋ณด๊ธธ ๋ฐ๋๋ค.
1253๋ฒ: ์ข๋ค
์ฒซ์งธ ์ค์๋ ์์ ๊ฐ์ N(1 ≤ N ≤ 2,000), ๋ ๋ฒ์งธ ์ค์๋ i๋ฒ์งธ ์๋ฅผ ๋ํ๋ด๋ Ai๊ฐ N๊ฐ ์ฃผ์ด์ง๋ค. (|Ai| ≤ 1,000,000,000, Ai๋ ์ ์)
www.acmicpc.net
๋ด๊ฐ ํผ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// Scanner์์ ์ฐจ์ด๋ก๋ ๋ฒํผ ์ฌ์ด์ฆ ์ฐจ์ด(Scanner : 1KB, Buffer..: 8KB)
// ๋ํ BufferedReader๋ String ๋ด๋๋๋ค.
// InputStreamReader๋ฅผ ํตํด ๋ฐ์ดํธ ๊ธฐ๋ฐ ์คํธ๋ฆผ์ ๋ฌธ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ์ผ๋ก ๋ณํ
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
StringTokenizer st = new StringTokenizer(bf.readLine());
long[] A = new long[N];
for(int i=0; i<N; i++) {
A[i] = Long.parseLong(st.nextToken());
}
Arrays.sort(A);
int count = 0;
for(int K=0; K<N; K++) {
int i=0;
int j=N-1;
while(i < j) {
if(A[i] + A[j] < A[K]) {
i++;
} else if (A[i] + A[j] > A[K]) {
j--;
} else if (A[i] + A[j] == A[K]) {
if (i != K && j != K) {
count++;
break;
} else if (i == K) {
i++;
} else if (j == K) {
j--;
}
}
}
}
System.out.println(count);
}
}
ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ํต์ฌ์ i์ j์ ์ ๋์ ์ธ ์ธ๋ฑ์ค ์์ง์์ด๋ค.
์ฆ, i์ j๋ ๊ฐ๊ฐ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋๋จ์ ์์นํ๋ค.
๊ทธ๋ฆฌ๊ณ , ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ฐ๋ผ์ i์ j๋ฅผ ํ ์นธ์ฉ ์ ๋ค๋ก ์ด๋์ํจ๋ค. ์ ๋ฌธ์ ์ฒ๋ผ ์กฐ๊ฑด์ด ์กฐ๊ธ ๋ ์๋ค๋ฉด ์ถ๊ฐํด ์ฃผ๋ฉด๋๋ค.(์ด ๋ถ๋ถ์ด ์ด๋ ค์ด ๋ฌธ์ ์ ์ฌ์ด ๋ฌธ์ ๋ฅผ ๋๋๋ ๊ธฐ์ค์ธ ๋ฏ ํ๋ค.)
์ด ๋ฌธ์ ๋ ์ข์ ์ K์์ฒด๋ง์ผ๋ก๋ ์กฐ๊ฑด์ ๋ง์กฑ์ํฌ ์ ์๊ฒ ํด์ผ ํ๋ค. ๋ฌด์กฐ๊ฑด ๋ ์์ ํฉ์ด์ด์ผ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
Reference
- Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉ ํ ์คํธ ์๋ฐ ํธ
'๐ Knowledge > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ(๋ณํฉ, ๊ธฐ์) ์๊ณ ๋ฆฌ์ฆ (3) (0) | 2023.08.18 |
|---|---|
| [์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ(ํต ์ํธ) ์๊ณ ๋ฆฌ์ฆ (2) (0) | 2023.08.14 |
| [์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ(๋ฒ๋ธ, ์ ํ, ์ฝ์ ) ์๊ณ ๋ฆฌ์ฆ (1) (0) | 2023.08.13 |
| [์๊ณ ๋ฆฌ์ฆ] ์คํ๊ณผ ํ์ ์ฌ์ฉ (0) | 2023.08.12 |
| [์๊ณ ๋ฆฌ์ฆ] ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.08.11 |