1. ๋ฌธ์ ์ค๋ช ๐
์ผ๋ จ์ ์๊ฐ 1์ฐจ์ ๋ฐฐ์ด ํ์์ผ๋ก ์ฃผ์ด์ง๋ค. ์ด๋ ์๋ค ์ค ์์์ ์ ํ๋๋ฅผ ๋ค๋ฅธ ์ ๋๊ฐ์ ํฉ์ผ๋ก ๋ํ๋ผ ์์ ๋, ์ด ์์์ ์๋ฅผ ์ข์ ์
๋ผ๊ณ ํ๋ค. ์ด๋ฌํ ์ข์ ์๊ฐ ๋ฐฐ์ด ๋ด์ ๋ช ๊ฐ์ธ์ง ๊ตฌํ๋ผ
2. ์ ๊ทผ ๋ฐฉ์ ๐๏ธ
Key Word
: Two-way Two Pointer
๋ ํฌ์ธํฐ์ ํฉ > target
: R ํฌ์ธํฐ๋ฅผ ํ ์นธ ๋ด๋ ค ํฉ์ ํํฅ ์กฐ์ ๋ ํฌ์ธํฐ์ ํฉ < target
: L ํฌ์ธํฐ๋ฅผ ํ ์นธ ์ฌ๋ ค ํฉ์ ์ํฅ ์กฐ์ ๋ ํฌ์ธํฐ์ ํฉ == target
: ๋ต์ +1 ์ฌ๋ฆฌ๊ณ ๋ฐ๋ณต๋ฌธ ์ข ๋ฃ
(1) ์๊ฐ ๋ณต์ก๋๋?
N = 2000 ์ผ๋ก ์ด์ค ๋ฐ๋ณต๋ฌธ๊น์ง ํ์ฉ ๋ฒ์์ด๋ค. ๋ฐ๋ผ์
- N๊ฐ ์ค์ ํ๋ Target ๊ฐ์ผ๋ก ์ฐพ๊ธฐ (O(N))
- ๋ ํฌ์ธํฐ ์์ง์ด๋ฉฐ Target ๊ฐ ๋ง๋ค ์ ์๋์ง ์ฐพ๊ธฐ (O(N))
๋ ์์ง์์ ์ฐ์์ผ๋ก ์ผ์ด๋๋, ์ต์ข ์ต์ ์ ์๊ฐ ๋ณต์ก๋๋ ( O(N^2) ) ์ด๋ค.
3. ์ฝ๋ ์๊ฐ ๐
import java.io.*;
import java.util.*;
public class Main {
/*
* b1253 ์ข๋ค
* (1) Target ๊ฐ ์ฐพ๊ธฐ O(N)
* (2) Target ๊ฐ ๋ง๋ค ์ ์๋์ง ํ์ธ O(N)
* */
public static void main(String[] args) throws IOException {
// ์
๋ ฅ ๋ฐ๊ธฐ
int ans = 0;
int N;
int [] arr;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
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);
for (int i = 0; i < N; i++) {
int target = arr[i];
int l = 0; int r = N-1;
while (l < r){
if(l == i){
l++;
continue;
}else if(r == i){
r--;
continue;
}
int now = arr[l] + arr[r];
if(now < target) l++;
else if(now > target) r--;
else {
ans++;
break;
}
}
}
System.out.println(ans);
}
}
4. ๋ฐฐ์ด ๊ฒ๋ค ๐ฏ
(1) ๋จ๋ฐฉํฅ ํฌ ํฌ์ธํฐ๋ฅผ ๋ชป ์ฐ๋ ์ด์ ?
๊ฒฐ๋ก : ๋จ๋ฐฉํฅ ํฌ ํฌ์ธํฐ๋
์ค์ด๋ฆ
์ ํํํ์ง ๋ชปํ๋ค.
ํด๋น ๋ฌธ์ ์์๋ (1) ๋ ์์ ํฉ < target
, (2) ๋ ์์ ํฉ > target
์ธ ๊ฒฝ์ฐ ํฌ์ธํฐ๋ฅผ ์ ์ ํ ์กฐ์ ํด target ๊ฐ์ ๋ค๊ฐ๊ฐ์ผ ํ๋ค. ์๋ฐฉํฅ ํฌ์ธํฐ์ ๊ฒฝ์ฐ (1)๋ฒ์ ๊ฒฝ์ฐ ์ผ์ชฝ ํฌ์ธํฐ๋ฅผ ํ ์นธ ์ฌ๋ ค์ ๊ฐ์ ์ํฅ ์กฐ์ ํ๊ณ , (2)์ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ ํ ์นธ ๋ด๋ ค์ ํํฅ ์กฐ์ ํ๋ค๋ฉด ๋์์ ํฉ์ ์ฆ๊ฐ์ํค๊ฑฐ๋ ๊ฐ์ํด๊ฐ๋ฉฐ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํ ์ ์๋ค.
๋ฐ๋ฉด ๋จ๋ฐฉํฅ ํฌํฌ์ธํฐ์ ๊ฒฝ์ฐ ๋ ํฌ์ธํฐ์ ์์ง์ ๋ชจ๋ ์ฆ๊ฐ๋ง์ ํํํ๋ค. ๋ค์์ ์๋ฅผ ๋ณด์.
๋ ์์ ํฉ > target
์ด๋ฉด L์ ++, ๋ ์์ ํฉ < target
์ด๋ฉด R์ ์์ง์ธ๋ค๊ณ ํด๋ณด์. ํด๋น ์์์์ R์ index = 10๊น์ง ์์ง์ฌ๋ ์ฌ์ ํ target๊ฐ ๋ณด๋ค ์๋ค. ๊ทธ๋์ ๋ต์ ๋ชป ์ฐพ๋๋ค. 1+2 = 3 ์ด๋ ๋ต์ด ์
๋ ฅ๋ ๊ฐ๋ค ์ฌ์ด์ ์์์๋ ๋ง์ด๋ค.