728x90
๋ฐ˜์‘ํ˜•

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

+ Recent posts