728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ: 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);
	}

}
728x90
๋ฐ˜์‘ํ˜•

+ Recent posts