๋ฌธ์ : https://www.acmicpc.net/problem/1253
1253๋ฒ: ์ข๋ค
์ฒซ์งธ ์ค์๋ ์์ ๊ฐ์ N(1 ≤ N ≤ 2,000), ๋ ๋ฒ์งธ ์ค์๋ i๋ฒ์งธ ์๋ฅผ ๋ํ๋ด๋ Ai๊ฐ N๊ฐ ์ฃผ์ด์ง๋ค. (|Ai| ≤ 1,000,000,000, Ai๋ ์ ์)
www.acmicpc.net
์ฑ
์์ ๋์ค๋ ํฌ ํฌ์ธํฐ ๋ง์ง๋ง ๋ฌธ์ ๋ค. ์ฑ
์์๋ ๊ณจ๋ 3์ด๋ผ๊ณ ๋์ด์๋๋ฐ, ํ์ฌ๋ ๊ณจ๋ 4๋ก ๋ด๋ ค๊ฐ๋ค.
๋ฐ๋๋ฐ๋ํ๊ฒ ์ค๋ฒ๋ก ์ฌ๋ผ์จ ๋ด๋น์๊ฒ ์์งํ ์ด ๋ฌธ์ ๋๋ฌด ์ด๋ ค์ ๋ค.
์ฑ
์ ์๋ ํ์ด๋ฅผ ๋ด๋ ์ดํด๊ฐ ์๋๋ค. ์ฌ์ค ํ๋ฒ ๊ธํ๊ฒ ์ฝ์ง์ ๋๋ธ ์ ์ ์์๋๋ฐ,
๋ค์ ํ๋ ค๋๊น ๊ฐ์ ๊ณณ์์ ํด๋งจ ๊ฒ์ด๋ค.
์ํผ ์๋ก ์ ์ฌ๊ธฐ๊น์ง ํ๊ณ ์ด์ ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ์.
N์ ์
๋ ฅ๋ฐ๊ณ N๊ฐ์ ์ซ์๋ค์ ์
๋ ฅ์ ๋ฐ๊ณ ๋์ ์ด ์ซ์๋ค๋ผ๋ฆฌ ์๋ก ๋ํด์ ๋ฐฐ์ด ์์ ์๋ ์์๊ฐ ๋๋ฉด
๊ทธ๊ฒ ๋ฌธ์ ์์ ์๊ธฐํ๋ '์ข์ ์'์ธ ๊ฒ์ด๋ค. ์ ๊ทผ๋ฐ ์๊ธฐ ์์ ์ ๋ํด์ ๊ทธ ์ซ์๊ฐ ๋์ค๋๊ฑด ์ ์ธํ๋ค.
ex) 1+1 = 2, 2+2 = 4 ... ์๋ํ๋ฉด ๋ฌธ์ ์์ "์์ ์์น๊ฐ ๋ค๋ฅด๋ฉด ๊ฐ์ด ๊ฐ์๋ ๋ค๋ฅธ ์์ด๋ค."๋ผ๊ณ ํ๋ค.
์ด๊ฒ์ ๋์ฐ๋ก ๋ค์ง์ด๋ณด๋ฉด "๊ฐ์ด ๋ฌ๋ผ๋ ๊ฐ์์์ด๋ฉด ์์ ์์น๊ฐ ๊ฐ๋ค." ์ ๊ฐ์ ๋ฌธ์ฅ์ด ๋๋ค.
๊ฒฐ๊ตญ ๊ฐ์ ์๋ผ๋ฆฌ๋ ๋ํ๋ฉด ์๋๋ค๋ ๋ง์ด ๋ฌธ์ ์ ๋ดํฌ๋์ด์๋ ๊ฒ์ด๋ค.
๋ค๋ง ์ด๊ฑด ํ์๊ฐ์ ์ฝ๋ฆฐ์ด๋ค์๊ฒ๋ ํ๋ฆ์ด ์ข ์ด๋ ค์ธ ์ ์์ผ๋, ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช
์ ํด๋ณด๊ฒ ๋ค.
N์ 5์ด๋ฉฐ 1 2 3 4 5 ๋ฅผ ์
๋ ฅ๋ฐ์๋ค๊ณ ๊ฐ์ ํ์.
๊ทธ๋ผ ์ด์ ์ด ํ๋ฆ๋ค์ ํ ๋๋ก ์ฝ๋๋ฅผ ์ง๋ณผ ์๊ฐ์ด๋ค.
import java.util.*;
import java.io.*;
public class BOJ_1253_4 {
public static void main(String[] args) throws IOException{
// TODO ๋ฐฑ์ค 1253
//์
๋ ฅ์ ๋นจ๋ฆฌ ๋ฐ๊ธฐ ์ํ BufferedReader ํด๋์ค ๊ฐ์ฒด ์ ์ธ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//ํ ์ค์ ํ๋๋ง ์
๋ ฅ ๋ฐ๋๋ค๋ฉด StringTokenizer ํด๋์ค๋ฅผ ์ด์ฉํ
//๋ฌธ์์ด ํ์ฑ์ด ํ์๊ฐ ์์.
//nums๋ผ๋ ๋ฐฐ์ด ์ ์ธ -> ์ซ์๋ค์ ์ ์ฅํ ๋ฐฐ์ด
int N = Integer.parseInt(br.readLine());
int nums[] = new int[N];
//ํ ์ค์ ์ฌ๋ฌ๊ฐ์ ์ซ์๋ค์ ์
๋ ฅ๋ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ฑ์ด ํ์ํด์ง.
//StringTokenizer ํด๋์ค ๊ฐ์ฒด ์ ์ธํด์ค.
//for๋ฌธ์ ์ด์ฉํด์ ๋ฐฐ์ด์ ํ์ฑํ ์ซ์๋ค์ ํ๋์ฉ ์ ์ฅํด์ค๋ค.
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
//๋ฐฐ์ด์ ๋ด์ฉ๋ฌผ์ ์ ๋ ฌํด์ค๋ค. ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
//answer๋ '์ข์ ์'์ ๊ฐ์๋ฅผ ์นด์ดํ
ํ๊ธฐ ์ํ ๋ณ์๋ค.
Arrays.sort(nums);
int answer = 0;
//์๋ก ๋ํด์ ๋์์ผ ํ๋ ๊ฐ์ target ๋ณ์๋ก ์ค์ ํ์.
//target์ ๋ฐฐ์ด์ ๊ฐ ์์ ๊ฐ๋ค์ด ์ ์ฅ๋์ด์ผ ํ๋ฏ๋ก for๋ฌธ์ผ๋ก
//while(ํฌ ํฌ์ธํฐ ๋ฐ๋ณต๋ฌธ)์ ๊ฐ์ธ์ค๋ค.
for(int i=0; i<N; i++) {
int target = nums[i];
int start = 0, end = N-1;
//ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ
while(start < end) {
//sum์ ๋ฐ๋ณต๋ฌธ ์์์ ๊ฐ์ด ๊ณ์ ๋ฐ๋์ด์ผ ํจ.
//sum๊ณผ target์ ๊ฐ์ ๋น๊ตํด์ผ ํ๊ธฐ ๋๋ฌธ.
int sum = nums[start] + nums[end];
//sum์ด๋ target์ด ๊ฐ์ ๊ฒฝ์ฐ์ start์ end๋ฅผ ํ๋ฒ ๋ ์ฒดํฌํด์ค๋ค.
//๊ทธ๋์ผ ์๊ธฐ ์์ ๊ณผ ๋ํด์ ์ข์ ์๋ฅผ ์ฐพ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
if(sum == target) {
if(start != i && end != i) {
++answer;
break;
} else if(start == i) {
++start;
} else {
--end;
}
} else if(sum < target) {
//sum๊ฐ์ด target๋ณด๋ค ์๋ค๋ฉด ๊ฐ์ ๋๋ ค์ค์ผ ํ๋ฏ๋ก,
//start๋ฅผ ๋๋ ค์ค๋ค.
++start;
} else {
//else๋ผ๋ฉด sum > target ๊ฒฝ์ฐ๋ฐ์ ๋จ์ง ์๋๋ฐ,
//์ด๋ sum์ ๊ฐ์ ์ค์ฌ์ค์ผ ํ๋ฏ๋ก end๋ฅผ ์ค์ฌ์ค๋ค.
--end;
}
}
}
//for๋ฌธ๊ณผ while๋ฌธ์์ ๋์จ ํ answer๋ฅผ ์ถ๋ ฅํด์ค๋ค.
System.out.println(answer);
}
}
'โJAVA > ๐ฉโ๐ปBOJ(๋ฐฑ์ค)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํฌ ํฌ์ธํฐ, JAVA] ๋ฐฑ์ค - 1940 (2) | 2022.09.20 |
---|---|
[ํฌ ํฌ์ธํฐ, JAVA] ๋ฐฑ์ค - 2018 (0) | 2022.09.19 |
[ํฌ ํฌ์ธํฐ, JAVA] ๋ฐฑ์ค - 2467 (0) | 2022.09.19 |
[๊ตฌ๊ฐํฉ, JAVA] ๋ฐฑ์ค - 10986 (0) | 2022.08.20 |
[๊ตฌ๊ฐํฉ, JAVA] ๋ฐฑ์ค - 11660 (0) | 2022.08.17 |