๋ฌธ์ : https://www.acmicpc.net/problem/2467
2467๋ฒ: ์ฉ์ก
์ฒซ์งธ ์ค์๋ ์ ์ฒด ์ฉ์ก์ ์ N์ด ์ ๋ ฅ๋๋ค. N์ 2 ์ด์ 100,000 ์ดํ์ ์ ์์ด๋ค. ๋์งธ ์ค์๋ ์ฉ์ก์ ํน์ฑ๊ฐ์ ๋ํ๋ด๋ N๊ฐ์ ์ ์๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฅ๋๋ฉฐ, ์ด ์๋ค์ ๋ชจ๋ -
www.acmicpc.net
ํฌ ํฌ์ธํฐ์ ๋ํด์ ๊ณต๋ถํ๋ค๊ณ ํ์ ๋ ์๊ณ ๋ฆฌ์ฆ ๋จํก๋ฐฉ์ ๊ณ์ ๋ถ๊ป์ ์ถ์ฒํด์ฃผ์ ๋ฌธ์ ๋ค.
ํ์๋ ์ด ๋ฌธ์ ๋ก ๋๊ฐ์ ํฌ์ธํฐ๊ฐ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ ๊ฒ๊ณผ ์๋ก ๋ค๋ฅธ ๋ฐฉํฅ์์ ์งํ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฐจ์ด๋ฅผ ์ ์ ์์๋ค.
๋น์ฐํ ์๊ธฐ์ง๋ง ์ด ๋ฌธ์ ๋ฅผ ํ ๋ ์ ๋ง ๋จธ๋ฆฌ๋ฅผ ์ฅ์ด ์ธ๋งธ๋ ๊ฒ์ผ๋ก ๊ธฐ์ตํ๋ค.
์ด์ ๋ฐ๋๋ฐ๋ํ๊ฒ ์ค๋ฒ๊ฐ ๋ ๋ด๋น์๊ฒ ๊ณจ๋ ๋ฌธ์ ๋ ์์ง๊น์ง๋ ๋ง์ด ์ด๋ ค์ ๋ค.
ํ์ง๋ง ๋๋ ํ ์ ์์๋ ๋งํผ ๋ค๋ฅธ ๋ถ๋ค๋ ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ ๋ง ์๋ค๋ฉด ํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ง๊ธ๋ถํฐ ๋ฌธ์ ๋ถ์๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋์ด๊ฐ๋ณด์.
์ผ๋จ ๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ฒ ์์ฒด๋ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์๋ค.
๋ ์ฉ์ก์ ํฉ์ด ์ต๋ํ 0๊ณผ ๊ฐ๊น์ฐ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค. ์ถ๋ ฅ์ ๊ทธ ๋ ์ฉ์ก์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ๋ฌธ์ ์ ์ด ์๊ธด๋ค. ๋ํด์ 0๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ์ฐพ์ผ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ์ง?
์ฆ, ์ฐ๋ฆฐ ์ฌ๊ธฐ์ ํฌ ํฌ์ธํฐ + ๊ทผ์ฌ๊ฐ ์๊ณ ๋ฆฌ์ฆ ์ด๋ ๊ฒ ๊ฐ์ด ์์์ผ ์ด ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
๋ฌผ๋ก ์ด๋ถํ์์ผ๋ก๋ ํ ์ ์์ง๋ง, ์ผ๋จ ์ด ๊ธ์์ ํฌ ํฌ์ธํฐ๋ก ์ฃผ์ ๋ฅผ ์ก๊ณ ํ๊ฒ ๋ค.
0๊ณผ ๊ทผ์ฌํ ๊ฐ์ ๊ตฌํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
์ผ๋จ 0์์ ์ผ๋ง๋ ๋จ์ด์ ธ์๋์ง๋ฅผ ์ฒดํฌํ๊ณ , ์ด ๊ฐ๊ณผ ๋น๊ตํ ์ด์ ์ ์ต์ ๊ฑฐ๋ฆฌ๊ฐ์ด ์์ด์ผ ํ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด์ ์ฐ๋ฆฐ ์ ๋๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ค. ์๋ํ๋ฉด ์ ๋๊ฐ ์์ฒด๊ฐ ์์ง์ ์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ปํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ํด์ ๋์จ ์ต์๊ฐ์ด ์ด์ ์ ์ต์ ๊ฑฐ๋ฆฌ๊ฐ๋ณด๋ค ์๋ค๋ฉด ์ต์๊ฐ์ ๋ฐ๊ฟ์ฃผ๊ณ ๋ํด์ง๋ ๊ฐ๋ค์ ๋ต์ผ๋ก ์ง์ ํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฐ ๊ทธ ๋ํด์ง๋ ๊ฐ๋ค์ ํฌ ํฌ์ธํฐ๋ก ์ฐพ์ผ๋ฉด ๋๋ค. ๋ง๋ก ํ๋ฉด ์ด๋ ต์ง๋ง, ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ์ฌ์ธ ๊ฒ์ด๋ค.
์ ๋ฆฌํ์๋ฉด
โ ์๋ก ๋ํด์ง๋ ์ซ์๋ค์ ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ ๋ฐ๊ฟ์ค๋ค. (0์ ๊ธฐ์ค์ผ๋ก)
โก ๋ํ ๊ฐ์ด 0์ด๋ ๊ฐ๊น์ด์ง ์ฒดํฌํ๋๊ฑด ๊ทผ์ฌ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
๊ทธ๋ผ ์ด์ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
import java.util.*;
import java.io.*;
public class BOJ_2467_4 {
public static void main(String[] args) throws IOException{
// TODO ๋ฐฑ์ค 2467
//์
๋ ฅ์ ๋นจ๋ฆฌ ๋ฐ๊ธฐ ์ํ BufferedReader ํด๋์ค์ ์ซ์๋ค์ ํ์ฑํ STringTokenizer ํด๋์ค ๊ฐ์ฒด
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); //์ฉ์ก์ ๊ฐ์
int[] nums = new int[N]; //์ฉ์ก ๊ฐ์๋งํผ์ ๋ฐฐ์ด ์ ์ธ
//st ๋ณ์ ์ด๊ธฐํ. BufferedReader ํด๋์ค๋ ํ ์ค์ฉ๋ง ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์,
//์
๋ ฅ๋ฐ๋ ์ค์ด ๋ฌ๋ผ์ง๋ค๋ฉด st๋ฅผ ์ด๊ธฐํํด์ค์ผ ํ๋ค.
st = new StringTokenizer(br.readLine());
//์ฉ์ก์ ์ซ์๋ค์ ์
๋ ฅ๋ฐ๋ ๋ฐ๋ณต๋ฌธ
for(int i=0; i<N; i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
//start๋ ๋ฐฐ์ด์ ์์ ์ธ๋ฑ์ค, end๋ ๋ฐฐ์ด์ ๋ ์ธ๋ฑ์ค,
//asnwer1, answer2๋ 0๊ณผ ๋ํด์ 0๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด 2๊ฐ์ ์ฉ์ก ๊ฐ์ ์ ์ฅํ ๋ณ์๋ค์ด๋ค.
//min์ ์ด์ ์ต์๊ฐ์ด๋ค. ํ์ง๋ง ์ง๊ธ์ ๋น๊ต ๋์์ด ์๊ธฐ ๋๋ฌธ์(์์ง ๋ฐ๋ณต๋ฌธ์ ๋ค์ด๊ฐ์ง ์์)
//Long์ ์ต๋๊ฐ์ผ๋ก ์ ์ฅํด๋์ ์ํ๋ค.
int start = 0, end = N-1, answer1 = 0, answer2 = 0;
long min = Long.MAX_VALUE;
//ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ + ๊ทผ์ฌ๊ฐ ์๊ณ ๋ฆฌ์ฆ
while(start < end) {
//๋ํ ๊ฐ์ ๋ฐ๋ณต์ด ๋ ๋๋ง๋ค ๋ณํด์ผ ํ๋ฏ๋ก ๋ฐ๋ณต๋ฌธ ์์์ ์ ์ธํ๊ณ ๊ฐ์ ๋ํด์ค๋ค.
//abs๋ ๋ํ ๊ฐ์ ์ ๋๊ฐ์ด๋ค.
//๋ฐ๋ก ์ ์ฅํ๋ ์ด์ ๋ sum ๊ฐ์ ๋ฒ์์ ๋ฐ๋ผ์
//start๋ฅผ ์ฆ๊ฐ ์ํค๊ฑฐ๋ end๋ฅผ ๊ฐ์์์ผ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
long sum = nums[start] + nums[end];
long abs = Math.abs(sum);
//๋ง์ฝ์ ์ด์ ํฉ์ด ํ์ฌ ๋ํ ๊ฒ๋ณด๋ค ํฌ๋ค๋ฉด - ์๋ก์ด ์ต์๊ฐ ํ์
//min์ ๊ฐ์ ๋ฐ๊ฟ์ฃผ๊ณ answer1, 2์๋ค๊ฐ ํ์ฌ ์ฉ์ก์ ๊ฐ๋ค์ ์ ์ฅํด์ค๋ค.
//์ ์ฅํด์ฃผ๊ณ ๋ง์ฝ sum์ด 0์ด๋ผ๋ฉด ์ด๋ฏธ 0๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ ๊ฐ์ ์ฐพ์ ๊ฒ์ด๋ฏ๋ก
//๋ฐ๋ณต๋ฌธ์ ์ข
๋ฃ์์ผ์ค๋ค.
if(abs < min) {
min = abs;
answer1 = nums[start];
answer2 = nums[end];
if(sum == 0) {
break;
}
}
//๋ง์ฝ์ sum์ด 0๋ณด๋ค ์๋ค๋ฉด - 0๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ด ๋์ด์ผ ํ๋ฏ๋ก
//0๋ณด๋ค ์์ ๊ฐ์ด ๋์จ๋ค๋ฉด start ์ธ๋ฑ์ค๋ฅผ ์ฆ๊ฐ์์ผ์ฃผ๊ณ ,
//๋ฐ๋์ ๊ฒฝ์ฐ์ end๋ฅผ ์ค์ฌ์ค๋ค.
if(sum < 0) {
++start;
} else {
--end;
}
}
//๋ฐ๋ณต๋ฌธ์ด ์ข
๋ฃ๋๋ค๋ฉด ๋ ์ฉ์ก๋ค์ ์ถ๋ ฅํด์ค๋ค.
System.out.println(answer1+" "+answer2);
}
}
'โJAVA > ๐ฉโ๐ปBOJ(๋ฐฑ์ค)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํฌ ํฌ์ธํฐ, JAVA] ๋ฐฑ์ค - 1940 (2) | 2022.09.20 |
---|---|
[ํฌ ํฌ์ธํฐ, JAVA] ๋ฐฑ์ค - 2018 (0) | 2022.09.19 |
[๊ตฌ๊ฐํฉ, JAVA] ๋ฐฑ์ค - 10986 (0) | 2022.08.20 |
[๊ตฌ๊ฐํฉ, JAVA] ๋ฐฑ์ค - 11660 (0) | 2022.08.17 |
[๊ตฌ๊ฐํฉ, JAVA]๋ฐฑ์ค - 11659๋ฒ (0) | 2022.08.16 |