728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ: 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);
	}
}
728x90
๋ฐ˜์‘ํ˜•

+ Recent posts