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