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
๋ฐ˜์‘ํ˜•
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
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ: https://www.acmicpc.net/problem/2018

 

2018๋ฒˆ: ์ˆ˜๋“ค์˜ ํ•ฉ 5

์–ด๋– ํ•œ ์ž์—ฐ์ˆ˜ N์€, ๋ช‡ ๊ฐœ์˜ ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋‹น์‹ ์€ ์–ด๋–ค ์ž์—ฐ์ˆ˜ N(1 ≤ N ≤ 10,000,000)์— ๋Œ€ํ•ด์„œ, ์ด N์„ ๋ช‡ ๊ฐœ์˜ ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€์ง€์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์–ดํ•œ

www.acmicpc.net


์ฑ…์—์„œ ํˆฌ ํฌ์ธํ„ฐ์— ๋“ค์–ด๊ฐˆ ๋•Œ ๊ฐ€์žฅ ์ฒ˜์Œ์œผ๋กœ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ๋‹ค.
๋ฌธ์ œ๋Š”.. ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค๋ฉฐ ๋ฐ”๋กœ ์‹ค์ „ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์ž๋Š” ๋ง๊ณผ ํ•จ๊ป˜ ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
๋‹นํ™ฉ์Šค๋Ÿฝ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ํ’€์–ด์•ผ ํ•œ๋‹ค.

๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด 15๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. 7+8, 4+5+6, 1+2+3+4+5.
์ด ๋ฐฉ๋ฒ•๋“ค์ด ์ด ๋ช‡ ๊ฐœ์ธ์ง€ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ด๋‹ค.
๋ฌธ์ œ๋กœ๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋ง‰์ƒ ์งœ๋ ค๊ณ  ํ•˜๋ฉด ์ž˜ ๋ชจ๋ฅด๊ฒ ๋Š”๊ฒŒ ์‚ฌ์‹ค์ด๋‹ˆ, ์ž์„ธํ•œ ํˆฌ ํฌ์ธํ„ฐ์˜ ๊ฐœ๋…์€ "ํˆฌ ํฌ์ธํ„ฐ" ๊ธ€์”จ๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ๊ธธ ๋ฐ”๋ž€๋‹ค.
๋ฐฐ๊ฒฝ์ƒ‰์œผ๋กœ ์ž…ํ˜€์ ธ์žˆ๋Š” ํˆฌ ํฌ์ธํ„ฐ ๊ธ€์”จ๋“ค์€ ๋ชจ๋‘ ๊ทธ์™€ ํ•ด๋‹นํ•˜๋Š” ๊ธ€์˜ ๋งํฌ๋กœ ๋˜์–ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ  ๋ฐ”๋ž€๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ฐœ๋…์ด ํ•„์š”ํ•œ์ง€ ์•Œ์•˜์œผ๋‹ˆ, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์งœ์•ผ ํ•˜๋Š”๊ฐ€๋ฅผ ์•Œ์•„๋ณด์ž.
์ด ๋ฌธ์ œ๋Š” ๊ฐ™์€ ๋ฐฉํ–ฅ์—์„œ ์ง„ํ–‰ํ•˜๋Š” ํˆฌ ํฌ์ธํ„ฐ ํ๋ฆ„์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งœ๋Š” ๊ฒƒ์ด ํŽธํ•˜๋‹ค.
์™œ๋ƒํ•˜๋ฉด, ์˜ˆ์ œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ˆ„์ ํ•ด์„œ ๋”ํ•œ ๊ฒƒ์ด 15๊ฐ€ ๋˜๋Š”์ง€ ์ฒดํฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด
์ˆœ์„œ๋Œ€๋กœ ๋ˆ„์ ํ•ฉ์„ ํ•ด์„œ N์„ ์ฐพ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง„ํ–‰๋ฐฉํ–ฅ์ด ๊ฐ™์€ ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•˜๋‹ค.

๋‚˜๋จธ์ง€๋Š” ์ฝ”๋“œ๋กœ ์•Œ์•„๋ณด์ž.
์ฝ”๋“œ๋Š” ์ด 2๊ฐœ์˜ ๋ฒ„์ „์ด ์žˆ๋‹ค.
์ฒซ๋ฒˆ์งธ ๋ฒ„์ „์€ ๋ฐฐ์—ด์„ ์“ฐ์ง€ ์•Š์€ ํ’€์ด์ด๊ณ , ๋‘๋ฒˆ์งธ ๋ฒ„์ „์€ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ ํ’€์ด์ด๋‹ค.

import java.io.*;

public class BOJ_2018_5 {
	public static void main(String[] args) throws IOException{
		// TODO ๋ฐฑ์ค€ 2018
		
        //์ž…๋ ฅ์„ ๋นจ๋ฆฌ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ BufferedReader ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•ด์ค€๋‹ค.
        //์—ฌ๋Ÿฌ ์ˆซ์ž๋“ค์„ ํ•œ ์ค„์— ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋ฐ›์œผ๋ฉด ์ˆซ์ž๋“ค์„ ํŒŒ์‹ฑํ•  ํ•„์š”๊ฐ€ ์žˆ์ง€๋งŒ,
        //์ด๋ฒˆ์—” ์ž…๋ ฅ์„ ํ•œ ์ค„์— ํ•œ๋ฒˆ๋งŒ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— StringTokenizer ํด๋ž˜์Šค ๊ฐ์ฒด๋Š” ์„ ์–ธํ•˜์ง€ ์•Š๋Š”๋‹ค.
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
        //ํ•œ ์ค„์— ์ˆซ์ž ํ•˜๋‚˜๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๊ฒƒ์„ intํ˜•์œผ๋กœ ํ˜•๋ณ€ํ™˜์‹œ์ผœ์ฃผ๊ณ  N์— ์ €์žฅํ•œ๋‹ค.
		int N = Integer.parseInt(br.readLine());
		
        //start๋Š” ์‹œ์ž‘ ์ˆซ์ž, end๋Š” ๋ ์ˆซ์ž, sum์€ start์™€ end๋ฅผ ๋”ํ•œ ๊ฐ’, 
        //answer๋Š” ๋”ํ•ด์„œ N์ด ๋˜๋Š” ๊ฐœ์ˆ˜์— ๋Œ€ํ•œ ๋ณ€์ˆ˜๋‹ค.
		int start = 1, end = 1, sum = 1, answer = 1;
		
        //ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜
        //start < N์„ ์กฐ๊ฑด์œผ๋กœ ๋‹ฌ์€ ์ด์œ ๋Š” while๋ฌธ์€ ๋ฐ˜๋ณต๋ฌธ ๋‚ด์šฉ์ด ์ง„ํ–‰๋˜๋‹ค๊ฐ€ ์กฐ๊ฑด์— ์–ด๊ธ‹๋‚˜๋ฉด
        //๋ฐ”๋กœ ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— start <= N ์กฐ๊ฑด์œผ๋กœ ํ•˜์ง€ ์•Š์•˜๋‹ค.
		while(start < N) {
        	//start ์ˆซ์ž์™€ end ์ˆซ์ž๋ฅผ ๋”ํ•œ ๊ฐ’์ด N๊ณผ ๊ฐ™์œผ๋ฉด
            //answer๋ฅผ ๋Š˜๋ ค์ฃผ๊ณ  start๋ฅผ ์ œ๊ฑฐํ•ด์ค€๋‹ค.
            //์™œ๋ƒํ•˜๋ฉด ์ด๋ฏธ ํ˜„์žฌ ์‹œ์ž‘ํ•ญ์„ ํฌํ•จํ•œ end๊ฐ’๊นŒ์ง€ ๋”ํ•œ ๊ฒฝ์šฐ๋ฅผ answer์— ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
            //๋”ฐ๋ผ์„œ ์ œ๊ฑฐํ•ด์ค€ ๋‹ค์Œ, start๋ฅผ ํ•˜๋‚˜ ๋Š˜๋ ค์„œ ๋‹ค์Œ ์ผ€์ด์Šค๋ฅผ ์ฐพ๋Š”๋‹ค.
			if(sum == N) {
				++answer;
				sum -= start;
				++start;
			} else if(sum < N) {
            	//sum์ด N๋ณด๋‹ค ์ž‘๋‹ค๋ฉด sum์„ ๋Š˜๋ ค์ค˜์•ผ ํ•˜๋ฏ€๋กœ end๋ฅผ ๋Š˜๋ ค์ค˜์•ผ ํ•œ๋‹ค.
                //๋Š˜๋ ค์ค€ ๋‹ค์Œ, sum์— end๋ฅผ ๋”ํ•ด์ค€๋‹ค.
				++end;
				sum += end;
			} else {
            	//๊ทธ ๋ฐ–์˜ ์ผ€์ด์Šค๋ผ๋ฉด sum > N์ธ๋ฐ, ์ด ๊ฒฝ์šฐ์—๋Š” ์ˆซ์ž๋ฅผ ์ค„์—ฌ์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
                //start๋ฅผ sum์—์„œ ์ œ๊ฑฐํ•ด์ฃผ๊ณ 
                //start๋ฅผ 1์”ฉ ๋Š˜๋ ค์ค€๋‹ค.
				sum -= start;
				++start;
			}
		}
		
        //๊ทธ๋ ‡๊ฒŒ ๊ตฌํ•ด์ง„ ๋‹ต์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.
		System.out.println(answer);
	}
}
import java.util.*;
import java.io.*;

public class BOJ_2018_3 {
	public static void main(String[] args) throws IOException{
		// TODO ๋ฐฑ์ค€ 2018๋ฒˆ
		
		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+1];
		
        //๋ฐฐ์—ด ๊ฐ ์นธ๋งˆ๋‹ค ์ˆซ์ž๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•ด์ค€๋‹ค.
		for(int i=0; i<=N; i++) {
			nums[i] = i;
		}
		
        //sum์ด nums[0]์ธ ์ด์œ ๋Š” sum์ด 0์ด๊ฒŒ ๋˜๋ฉด ๋ฐฐ์—ด์˜ ์ฒซ ํ•ญ์ด 
        //๋ˆ„์ ํ•ฉ์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
		int start = 0, end = 0;
		int sum = nums[0];
		int answer = 1;
		
        //ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜
		while(end <= N-1) {
			if(sum == N) {
				++answer;
				++end;
				sum += nums[end];
			} else if(sum < N) {
				++end;
				sum += nums[end];
			} else if(sum > N) {
				sum -= nums[start];
				++start;
			}
		}
		
		System.out.println(answer);
	}
}

์ด ๋•Œ ๋‘๋ฒˆ์งธ ์ฝ”๋“œ๋ณด๋‹จ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋„ ๋œ ์žก์•„๋จน์œผ๋ฉฐ ์†๋„๋„ ์ข€ ๋” ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—,
์ฑ…์—์„œ๋Š” ์ฒซ๋ฒˆ์งธ ๋ฒ„์ „์„ ์ฑ„ํƒํ•œ๊ฒŒ ์•„๋‹๊นŒ ์‹ถ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
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
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•


๋ฌธ์ œ: https://www.acmicpc.net/problem/10986

 

10986๋ฒˆ: ๋‚˜๋จธ์ง€ ํ•ฉ

์ˆ˜ N๊ฐœ A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ์—ฐ์†๋œ ๋ถ€๋ถ„ ๊ตฌ๊ฐ„์˜ ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ตฌ๊ฐ„์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ฆ‰, Ai + ... + Aj (i ≤ j) ์˜ ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” (i, j)

www.acmicpc.net


์ฑ…์— ๋‚˜์˜ค๋Š” ๊ตฌ๊ฐ„ํ•ฉ ๋ฌธ์ œ์˜ ๋ํŒ์™•.. ์—ญ์‹œ๋‚˜ ๋ฌธ์ œ ๋ถ„์„ํ•˜๊ธฐ ํŒŒํŠธ์— ๋‚˜์˜ค๋Š” ์‹๋“ค์ด๋ž‘ ๋ง์€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•˜๊ณ ..
๊ทธ๋ ‡๊ฒŒ.. ์‚ฝ์งˆ์ด 2~3์ผ๊ฐ„ ๊ณ„์† ์ง€์†๋๋‹ค. ์ฑ…์—์„œ๋Š” ์‹ค๋ฒ„ 4์˜ ๋‚œ์ด๋„๋ผ๊ณ  ๋˜์–ด์žˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” ๊ณจ๋“œ 3์˜ ๋‚œ์ด๋„๋‹ค.
์†”์งํžˆ ํ•„์ž๋Š” ์‹ค๋ฒ„๋ฌธ์ œ๋“ค์„ ํ‘ธ๋Š”๋ฐ๋„ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ์ดํ•ดํ•˜๋Š” ๋ฐ์—๋„ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋Š”๋ฐ ๊ณจ๋“œ ๋‚œ์ด๋„๋ผ๋‹ˆ!
๊ทธ๋ž˜๋„ ์ด์™• ์—ฌ๊ธฐ๊นŒ์ง€ ์˜จ ๊ฑฐ ์ด ๋ฌธ์ œ๋ฅผ ๋Œ€์ถฉ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์—†์—ˆ๊ธฐ์— ์ด๊ฒƒ๋„ ๋ถ„์„์„ ํ•ด๋ณด์•˜๋‹ค.
๋ฌธ์ œ ์ด๋ฆ„์ด ๋‚˜๋จธ์ง€ ํ•ฉ ๊ตฌํ•˜๊ธฐ๋ผ๊ณ  ํ•ด์„œ ์ง„์งœ ๋‚˜๋จธ์ง€๋“ค์„ ๊ตฌํ•œ ๊ฒƒ๋“ค์„ ๋”ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,
์—ฐ์†๋˜๋Š” ์ˆซ์ž๋ฅผ ๋”ํ•œ ๊ฐ’์˜ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋˜๋Š” ์ˆœ์„œ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
์ฆ‰, ๊ฒฝ์šฐ์˜ ์ˆ˜์˜ ๊ฐœ๋… ์ค‘์˜ ํ•˜๋‚˜์ธ ์กฐํ•ฉ์ด ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฐธ๊ณ ๋กœ ํ•„์ž๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋‚˜ ์กฐํ•ฉ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋ƒ๋ฉด,
๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์ผ์ผ์ด ๋…ธ๊ฐ€๋‹คํ•ด์„œ ํ’€์—ˆ์œผ๋ฉฐ, ์กฐํ•ฉ์€ ๊ณต์‹๊ณผ ๋ฌธ์ œ ํ˜•์‹์„ ๋‹จ์ˆœ์•”๊ธฐํ•ด์„œ ํ’€์—ˆ๋‹ค.
๋•๋ถ„์— ์‹œํ—˜์ง€์™€ ๊ต๊ณผ์„œ๋Š” ๋…ธ๊ฐ€๋‹ค์˜ ํ”์ ์œผ๋กœ ๊ทธ ํŒŒํŠธ๋งŒ ๋นฝ๋นฝํ•ด์ง€๊ณ  ๋„ˆ๋œ๋„ˆ๋œํ•ด์กŒ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค.
ํ•˜์ง€๋งŒ ๊ฑฑ์ •ํ•  ํ•„์š” ์—†๋‹ค! ์ง€๊ธˆ์ด๋ผ๋„ ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ ์ œ๋Œ€๋กœ ์•Œ๊ณ  ํ’€๋ฉด ๋œ๋‹ค.
์‚ฌ์‹ค ํ•„์ž๋„ ์ด ๋ฌธ์ œ ๋•Œ๋ฌธ์— ์กฐํ•ฉ์„ ๋‹ค์‹œ ๊ณต๋ถ€ํ–ˆ๋‹ค.
์กฐํ•ฉ์ด๋ž€, ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋Š” ์–ด๋–ค ์ง‘ํ•ฉ์—์„œ ์ˆœ์„œ ์ƒ๊ด€์—†์ด r๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒƒ์ด๋‹ค.
์œ„ํ‚ค๋ฐฑ๊ณผ์—์„  ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์–ด์„œ ๋ณต์žกํ•ด๋ณด์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž.
์ฃผ๋จธ๋‹ˆ์— 10๊ฐœ์˜ ๊ตฌ์Šฌ์ด ์žˆ๋‹ค. ๊ตฌ์Šฌ๋“ค์—๋Š” ๋ฒˆํ˜ธ๋„ ์—†๊ณ . ์ƒ‰๊น”๋„ ๋ชจ๋‘ ๊ฐ™๋‹ค. ๊ทธ ์ค‘์— 2๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.
๊ทธ๋Ÿผ ๊ทธ ๊ตฌ์Šฌ์„ ๊บผ๋‚ด๋Š”๋ฐ์— ์ˆœ์„œ๊ฐ€ ํ•„์š”ํ•œ๊ฐ€? ๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๊ทธ ์ค‘์— 2๊ฐœ์˜ ๊ตฌ์Šฌ์„ ๋ฝ‘์€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด๋ ‡๊ฒŒ ๋ฝ‘๋Š” ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋จผ์ € ๋ฝ‘์€ ๊ฒƒ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€๋ฅผ ๋ฝ‘๊ฒŒ ๋œ๋‹ค๋ฉด ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๊ณ ,
์ˆœ์—ด์€ ๋ฝ‘๋Š” ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ์žˆ์œผ๋ฉฐ, ๋ฝ‘์€ ๊ฒƒ์„ ๋‚˜์—ดํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ˆœ์—ด์˜ ๊ธฐํ˜ธ๋Š” \(_{n}P_{r}\)์ด๊ณ , ์กฐํ•ฉ์˜ ๊ธฐํ˜ธ๋Š” \(_{n}C_{r}\)์ด๋‹ค. ์ด๋•Œ, \(_{n}C_{r}\)์€
$$\frac{n(n-1)(n-2)...\{n-(r-1)\}}{r!}$$

์ด๋•Œ, ๋ถ„์ž์— ์œ„์น˜ํ•œ n์€ r๊ฐœ ๋งŒํผ ๊ณฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 10๊ฐœ ์ค‘์— 2๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ์ฒ˜์Œ์—” 10๊ฐœ์ค‘์— ํ•˜๋‚˜๋‹ˆ๊นŒ 10๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ์ง€๋งŒ, ํ•˜๋‚˜๋ฅผ ๋ฝ‘๊ณ  ๋‚˜์„œ๋Š” 9๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 10*9๋ฅผ ํ•ด์ค€๋‹ค. ์—ฌ๊ธฐ์„œ 2๊ฐœ๋งŒ ํ•˜๋Š” ์ด์œ ๋Š” ์šฐ๋ฆฌ๋Š” ๊ตฌ์Šฌ์„ 2๊ฐœ๋งŒ ๋ฝ‘๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 3๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค๋ฉด 8๊ฐ€์ง€์˜ ๊ฐ€๋Šฅ์„ฑ์ด ๋˜ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— 10*9*8์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. r!์„ ๋‚˜๋ˆ„๋Š” ์ด์œ ๋Š” ๋ฝ‘์€ ์ˆœ์„œ๋Š” ๋‹ค๋ฅด์ง€๋งŒ ๊ฐ™์€ ๊ตฌ์Šฌ์„ ๋ฝ‘์•˜์„ ๊ฒฝ์šฐ๋ฅผ ์—†์• ์ฃผ๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
์ด์ œ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•œ ์ˆ˜ํ•™์  ๊ฐœ๋…์€ ๋‹ค๋ค˜์œผ๋‹ˆ, ์ด์ œ ๋‹ค์‹œ ๋ฌธ์ œ๋กœ ๋„˜์–ด์™€๋ณด์ž.
์‚ฌ์‹ค ํ•„์ž๋Š” ๋ฌธ์ œ ๋ถ„์„ํ•˜๊ธฐ ํŒŒํŠธ์˜ ๋‚˜๋จธ์ง€ ํ•ฉ ๋ฌธ์ œ ํ’€์ด์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด ๋ถ€๋ถ„์„ ๋˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—,
'์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด์ง€' ํ•˜๋ฉด์„œ ๋ถ„์„ํ–ˆ์—ˆ๋‹ค.
์•„๋ž˜๋Š” ์ฑ…์— ์ ํ˜€์žˆ๋Š” ํ•ต์‹ฌ ์•„์ด๋””์–ด ๋ถ€๋ถ„์„ ๋‚ด ์Šคํƒ€์ผ๋Œ€๋กœ ๊ณ ์ณ์จ๋ณธ ๊ฒƒ์ด๋‹ค.

  1. (A+B)%C = ((A%C) + (B%C))%C, ๊ณ ๋กœ (A+B)%C๋กœ๋งŒ ๊ณ„์‚ฐํ•ด๋„ ๋œ๋‹ค.
  2. ํ•ฉ ๋ฐฐ์—ด S[(ํ˜„์žฌํ•ญ)] - S[(์ „ ํ•ญ)]์€ ์›๋ณธ ๋ฐฐ์—ด์˜ (์ „ ํ•ญ)+1 ~ (ํ˜„์žฌํ•ญ)๊นŒ์ง€์˜ ๊ตฌ๊ฐ„ ํ•ฉ์ด๋‹ค.
  3. ๊ตฌ๊ฐ„ ํ•ฉ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ M์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  S[(ํ˜„์žฌํ•ญ)]๊ณผ S[(์ „ ํ•ญ)]์ด ๊ฐ™๋‹ค๋ฉด ์›๋ณธ ๋ฐฐ์—ด์—์„œ
    (์ „ ํ•ญ)+1 ~ (ํ˜„์žฌํ•ญ)๊นŒ์ง€์˜ ๊ตฌ๊ฐ„ ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
    (S[(ํ˜„์žฌํ•ญ)]%M = S[(์ „ ํ•ญ)]%M ์ด๋ฉด (S[(ํ˜„์žฌํ•ญ)] - S[(์ „ ํ•ญ)])%M = 0)

์ž, ์ด์ œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ถ„์„์€ ๋๋‚ฌ๋‹ค. ์ฝ”๋“œ๋กœ ๋„˜์–ด์™€๋ณด์ž.
ํ•ฉ ๋ฐฐ์—ด S์— ๋ˆ„์ ํ•ฉ์˜ ๊ฐ’์„ ์ €์žฅํ•ด์ค€๋‹ค. ๋ˆ„์ ํ•ฉ์˜ ์ž์„ธํ•œ ์„ค๋ช…์€ https://life-study-1031.tistory.com/7

 

[๊ตฌ๊ฐ„ํ•ฉ, JAVA]๋ฐฑ์ค€ - 11659๋ฒˆ

๋ฌธ์ œ: https://www.acmicpc.net/problem/11659 11659๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4 ์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด

life-study-1031.tistory.com

์ด ๊ธ€์— ์ž์„ธํžˆ ์žˆ์œผ๋‹ˆ ๋ˆ„์ ํ•ฉ์— ๋Œ€ํ•ด์„œ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์ด ๊ธ€์„ ์ฐธ๊ณ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
๋ˆ„์ ํ•ฉ์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ด์œ ๋Š” ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ์ˆœ์„œ์Œ์„ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•œ ๋‹ค์Œ, M์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง„๋‹ค๋ฉด 1ํ•ญ๋ถ€ํ„ฐ ๊ทธ ํ•ญ(nํ•ญ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž)๊นŒ์ง€ ๋”ํ•œ ๊ฐ’์ด ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— (1,n)์ด ์„ฑ๋ฆฝ๋˜๋ฏ€๋กœ, ๋‹ต์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ ๋‹ค์Œ์œผ๋กœ๋Š” ์กฐํ•ฉ์˜ ๊ฐœ๋…์„ ์ด์šฉํ•˜์—ฌ ๋‹ต์„ ๊ตฌํ•ด์•ผ ๋˜๋Š”๋ฐ, ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„  ๋จผ์ € ๋‚˜๋จธ์ง€์˜ ๊ฐœ์ˆ˜๋ฅผ ์…€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž. ๋‚˜๋จธ์ง€๊ฐ€ [1, 0, 0, 1, 0]์ผ ๊ฒฝ์šฐ, 0์ด 3๊ฐœ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ 0์ด ๋‚˜์˜ค๋Š” ์ˆœ์„œ์Œ์€ ๊ฐ๊ฐ ๋‹ค๋ฅผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ 0์ด ๋‚˜์˜ค๋Š” 3๊ฐ€์ง€ ๊ฒฝ์šฐ ์ค‘์—์„œ i์™€ j์— ํ•ด๋‹นํ•˜๋Š” ์ˆœ์„œ์Œ์„ ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด ๋ฝ‘๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— \(_{3}C_{2}\)๋ฅผ ํ•ด์•ผ ํ•˜๊ณ , ๊ทธ๊ฒƒ์„ ์œ„ํ•ด์„œ๋Š” ๋‚˜๋จธ์ง€์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ฌผ๋ก  0ํ•˜๋‚˜์— i,j ์ˆœ์„œ์Œ์ด ์žˆ๊ธฐ์— \(_{6}C_{2}\)๊ฐ€ ์•„๋‹Œ๊ฐ€์š”? ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋‚˜๋จธ์ง€๊ฐ€ 0๊ณผ ๋‹ฌ๋ผ์ง€๋Š” ์ˆœ์„œ์Œ์ด ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— \(_{3}C_{2}\)๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ ์งˆ๋ฌธ์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๋‚˜๋จธ์ง€๊ฐ€ 0์ธ ๊ฒƒ๋“ค์˜ ๊ฒฝ์šฐ๋งŒ ์„ธ๋ฉด ๋˜๋Š”๋ฐ, ์™œ ๊ตณ์ด 0๋ณด๋‹ค ํฐ ๋‚˜๋จธ์ง€๋“ค์˜ ๊ฐœ์ˆ˜๋„ ์„ธ๋Š” ๊ฒƒ์ธ๊ฐ€? ์ด๋Š” ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•  ๋•Œ 3๋ฒˆ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋…์„ ์ด์šฉํ•œ๊ฑด๋ฐ, S[(ํ˜„์žฌํ•ญ)]๊ณผ S[(์ „ ํ•ญ)]์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด (์ „ ํ•ญ)+1 ~ (ํ˜„์žฌํ•ญ)๊นŒ์ง€์˜ ๊ตฌ๊ฐ„ ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ๊ตฌ๊ฐ„์ด๊ธฐ ๋•Œ๋ฌธ์— 0๋ณด๋‹ค ํฐ ๋‚˜๋จธ์ง€์˜ ๊ฐœ์ˆ˜๋„ ์„ธ์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
๊ตฌ๊ธ€๋ง์œผ๋กœ ์ฐพ์€ ํ’€์ด์™€ ์ฑ…์—์„œ ๋‚˜์˜จ ํ’€์ด๋“ค์˜ ๊ณตํ†ต์ ์„ ์ฐพ์ž๋ฉด S[i]%M์˜ ๊ฐ’๊ณผ ๋‚˜๋จธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๊ฐ€ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•œ ์ด์œ ๋Š” ๊ทธ ๋‚˜๋จธ์ง€์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‚˜๋จธ์ง€๊ฐ€ [1, 0, 0, 1, 0] ์ด๋ ‡๊ฒŒ ๋‚˜์™”๋‹ค๋ฉด ์‚ฌ๋žŒ์€ 0์ด 3๊ฐœ, 1์ด 2๊ฐœ ์ด๋ ‡๊ฒŒ ์…€ ์ˆ˜ ์žˆ์ง€๋งŒ ์ปดํ“จํ„ฐ๋Š” ์ผ์ผ์ด 1์”ฉ ๋”ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜๋จธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์™€ ๊ฐ™๊ฒŒ ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค.

๋‚˜๋จธ์ง€๊ฐ€ 10010์ผ ๊ฒฝ์šฐ์˜ ๋‚˜๋จธ์ง€ ๊ฐœ์ˆ˜ ์„ธ๋Š” ๋ฐฐ์—ด์˜ ๊ฐ’

์ด๋Ÿฐ ์‹์œผ๋กœ ์ €์žฅ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฐ ์ด์ œ \(_{3}C_{2}+_{2}C_{2}\)์˜ ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

์ด์ œ ํ’€์ด์— ๊ด€๋ จ๋œ ์ฝ”๋“œํŒŒํŠธ๋„ ๋์ด ๋‚ฌ๋‹ค.

์ด๋ฒˆ์—๋Š” ์ˆ˜ํ•™์˜ ๊ฐœ๋…๊ณผ ์ฝ”๋”ฉ์ด ๊ฐ™์ด ๋‚˜์™€์„œ ํ•„์ž๋„ ์ด ๊ธ€์„ ์“ฐ๋Š”๋ฐ์— 3~4์ผ ์ •๋„ ๊ฑธ๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค.
๋‚ด์šฉ์ด ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด์ œ๋Š” ์ž‘์„ฑํ•˜๋ฉด์„œ ๋งŽ์ด ์ •๋ฆฌ๊ฐ€ ๋ผ์„œ ๋จธ๋ฆฟ์†์ด ํ•œ๊ฒฐ ๊น”๋”ํ•ด์ง„ ๊ฒƒ ๊ฐ™๋‹ค.
์ด๋ฒˆ ๋‚ด์šฉ์„ ์š”์•ฝํ•˜์ž๋ฉด
โ‘  ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„  ์ˆ˜ํ•™์  ๊ฐœ๋… ์ค‘ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    ์กฐํ•ฉ์˜ ์ˆ˜์‹์€ \(\frac{n(n-1)(n-2)...\{n-(r-1)\}}{r!}\)

โ‘ก ๋‚˜๋จธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค = ๋‚˜๋จธ์ง€ ์ด๋ ‡๊ฒŒ ์—ฐ์‚ฐ์„ ํ•ด์„œ ๋‚˜๋จธ์ง€์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ค€๋‹ค.
    ๊ทธ ์ด์œ ๋Š” ์ˆœ์„œ์Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ.
์ฒซ๋ฒˆ์งธ๋กœ ํ•ฉ๋ฐฐ์—ด S์— ๋‚˜๋จธ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ๋„ฃ์–ด์„œ ๊ณ„์‚ฐํ•˜๋Š” ์ฝ”๋“œ๋‹ค.

import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws IOException{
		// TODO ๋ฐฑ์ค€ 10986๋ฒˆ
		
        //์ž…๋ ฅ์„ ๋นจ๋ฆฌ ๋ฐ›๊ธฐ ์œ„ํ•ด BufferedReader ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ž…๋ ฅ์„ ๋ฐ›์Œ
        //BufferedReader ํด๋ž˜์Šค๋กœ ์ž…๋ ฅ์„ ๋ฐ›์œผ๋ฉด ๋ฌธ์ž์—ด ํŒŒ์‹ฑ์ด ํ•„์š”ํ•จ.
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
        //N = ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๊ฐœ์ˆ˜, M = ์ž…๋ ฅ๋ฐ›์„ ์ˆซ์ž๋“ค์„ ๋‚˜๋ˆŒ ์ˆซ์ž
        //sums = ํ•ฉ๋ฐฐ์—ด S, count = ๋‚˜๋จธ์ง€ ๋ฐฐ์—ด, answer = ์ˆœ์„œ์Œ ๊ฐœ์ˆ˜
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		long[] sums = new long[N+1];
		long[] count = new long[1000];
		long answer = 0;
		
        //๋ˆ„์ ํ•ฉ ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ
		st = new StringTokenizer(br.readLine());
		for(int i=1; i<=N; i++) {
			sums[i] = sums[i-1] + Integer.parseInt(st.nextToken());
		}
		
		for(int i=1; i<=N; i++) {
			//sums[i]์— %M ์—ฐ์‚ฐ์„ ํ•˜๊ณ  sums[i]์— ๋‹ค์‹œ ์ €์žฅ
            sums[i] %= M;
			
            //๋‚˜๋จธ์ง€๊ฐ€ 0์ด๋ฉด answer๋ฅผ ๋”ํ•ด์คŒ = ์ˆœ์„œ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์คŒ
			if(sums[i] == 0) {
				++answer;
			}
			
            //๋‚˜๋จธ์ง€์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค์— 1์„ ๋”ํ•ด์คŒ
			++count[(int)sums[i]];
		}
		
        //์กฐํ•ฉ์„ ์ด์šฉํ•œ ์ˆ˜์‹
        //2๋ฅผ ๋‚˜๋ˆˆ ์ด์œ ๋Š” 2! = 1*2 = 2 ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
		for(int i=0; i<count.length; i++) {
			if(count[i] > 1) {
				answer += count[i]*(count[i]-1)/2;
			}
		}
		
        //์ •๋‹ต ์ถœ๋ ฅ
		System.out.println(answer);
	}

}

 

๋‘๋ฒˆ์งธ๋กœ๋Š” ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

import java.io.*;
import java.util.*;

public class BOJ_10986 {

	public static void main(String[] args) throws IOException{
		// TODO ๋ฐฑ์ค€ 10986
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken()); //์ž…๋ ฅ๋ฐ›์„ ์ˆซ์ž์˜ ๊ฐœ์ˆ˜
		int M = Integer.parseInt(st.nextToken()); //๋‚˜๋ˆŒ ์ˆ˜
		long[] sums = new long[N+1];
		long[] count = new long[1000];
		long answer = 0;
		
        //์ด๋ ‡๊ฒŒ ํ•˜๋ฉด for๋ฌธ์„ 1๊ฐœ๋งŒ ์จ๋„ ํ•ฉ๋ฐฐ์—ด S์˜ ๊ฐ’์„ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
		st = new StringTokenizer(br.readLine());
		for(int i=1; i<=N; i++) {
			sums[i] = sums[i-1] + Integer.parseInt(st.nextToken());
            //๋‚˜๋จธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•จ.
			int rem = (int) (sums[i]%M);
			
            //๋‚˜๋จธ์ง€๊ฐ€ 0์ด๋ฉด answer๋ฅผ ๋Š˜๋ ค์ค€๋‹ค.
			if(rem == 0) {
				++answer;
			}
			
            //๋‚˜๋จธ์ง€๋ฅผ ๋‚˜๋จธ์ง€ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ์ด์šฉํ•˜์—ฌ ๋‚˜๋จธ์ง€์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ค€๋‹ค.
			++count[rem];
		}
		
		for(int i=0; i<count.length; i++) {
			if(count[i] > 1) {
				answer += count[i]*(count[i]-1)/2;
			}
		}
		
		System.out.println(answer);
	}
}
728x90
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ: https://www.acmicpc.net/problem/11660

 

11660๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5

์ฒซ์งธ ์ค„์— ํ‘œ์˜ ํฌ๊ธฐ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ˆ˜๊ฐ€ 1ํ–‰๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๋„ค

www.acmicpc.net


์ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ตฌ๊ฐ„ํ•ฉ๋„ ํ•  ๋งŒํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ ๋”ฑ ์ด ๋ฌธ์ œ๋ฅผ ๋ณด๋Š” ์ˆœ๊ฐ„,
์™€.. ๋‚ด๊ฐ€ ์ด๊ฑธ ํ’€ ์ˆ˜ ์žˆ์„๊นŒ ์ด ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋‚˜ํ•œํ…Œ๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ๊ฑฐ์˜ ์ตœ์ข… ๋ณด์Šค์ฒ˜๋Ÿผ ๋Š๊ปด์กŒ๋‹ค.
์™œ๋ƒํ•˜๋ฉด ํ•„์ž๋Š” 2์ฐจ์› ๋ฐฐ์—ด์— ์šธ๋ ์ฆ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ „ ์ง์žฅ์—์„œ๋„ ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๋Š” ๊ฒŒ ๋Šฅ์ˆ™์ง€ ์•Š์•„ ๋ณด์ธ๋‹ค๋Š” ๋ง์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ค์—ˆ์„ ์ •๋„๋กœ ์ดˆ๋ณด์ค‘์˜ ์ดˆ๋ณด์˜€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•ด์„œ ํ‘ผ๋‹ค? ์ •๋ง ๊ฐ€๋Šฅ์„ฑ์ด ๋‹จ 1๋„ ์—†์–ด ๋ณด์˜€๋‹ค.
ํ•˜์ง€๋งŒ ์ด ์—ญ์‹œ ๋ถ„์„ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ๊ฒฐ๊ตญ์—” ๋‹ค๋ฅธ ์ง์žฅ์— ๊ฐ€์„œ๋„ ๋˜‘๊ฐ™์€ ์†Œ๋ฆฌ๋ฅผ ๋“ฃ๊ฒŒ ๋  ๊ฒŒ ๋ป”ํ•˜๊ณ ,
๊ฒฐ๊ตญ ๊ณต๋ถ€๋‹ค์šด ๊ณต๋ถ€๋ฅผ ๋ชปํ•œ ๊ฒƒ์ด ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋ฌธ์ œ๋„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ถ„์„์„ ํ•ด๋‚˜๊ฐ”๋‹ค.
๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” ๋ถ„์„์„ ํ•ด๋ƒˆ๊ณ , 2์ฐจ์› ๋ฐฐ์—ด์˜ ๊ฑฐ๋ถ€๊ฐ๋„ ์กฐ๊ธˆ์€ ๋œ๊ฒŒ ๋˜์—ˆ๋‹ค.

์„œ๋ก ์ด ์ข€ ๊ธธ์—ˆ๋Š”๋ฐ, ๋จผ์ € 2์ฐจ์› ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.
2์ฐจ์› ๋ฐฐ์—ด์ด๋ž€, ๋ง ๊ทธ๋Œ€๋กœ 1์ฐจ์› ๋ฐฐ์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด, ๋ฉด ํ˜•ํƒœ๋ฅผ ๋ ๊ณ  ์žˆ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

2์ฐจ์› ๋ฐฐ์—ด ๊ตฌ์กฐ

๋”ฐ๋ผ์„œ ์ด 2์ฐจ์› ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„  2์ค‘ ๋ฐ˜๋ณต๋ฌธ์ด ๊ฑฐ์˜ ํ•„์ˆ˜์ ์œผ๋กœ ๋‚˜์˜จ๋‹ค.
์ฑ…์—์„œ๋Š” ๊ตฌ๊ฐ„ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ธฐ์ค€์œผ๋กœ ์•Œ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์—,
๊ตฌ๊ฐ„ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ๋ฌธ์ œํ’€์ด ๋ฐฉ์‹์„ ๋ถ„์„ํ•œ ๊ฒƒ์ด๋‹ค.

ํ•„์ž๊ฐ€ ๊ตฌ๊ธ€๋ง์œผ๋กœ ์•Œ์•„๋ณธ ๊ฒฐ๊ณผ, ์ด ๋ฌธ์ œ์—์„œ๋Š” DP(Dynamic Programing)๋ณด๋‹ค ๊ตฌ๊ฐ„ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๊ณ  ํ•˜์—ฌ ๊ตฌ๊ฐ„ํ•ฉ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. DP์— ๋Œ€ํ•ด์„œ๋Š” ์•„์ง ๊ณต๋ถ€๋ฅผ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ฐจํ›„์— ๊ธ€์„ ์ž‘์„ฑํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค.

์ƒ๊ฐํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ƒ๊ฐ์„ ํ•ด๋ณด์ž.
์ฒ˜์Œ์— 4๋ฅผ ์ž…๋ ฅํ•ด์„œ 4์นธx4์นธ = 16์นธ์˜ 2์ฐจ์› ๋ฐฐ์—ด์ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด์„œ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ๋„ฃ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง„๋‹ค.

๊ฐ’์„ ๋„ฃ์€ ๋‹ค์Œ์˜ 2์ฐจ์› ๋ฐฐ์—ด

์šฐ๋ฆฐ ์—ฌ๊ธฐ์„œ ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
๊ทผ๋ฐ ์–ด๋–ป๊ฒŒ ๊ตฌํ•ด์•ผ ์œ„, ์•„๋ž˜๋กœ ๋”ํ•ด์ง€๋Š” ๊ฒƒ๋„ ๋Œ€๋น„๋ฅผ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?


์ฑ…์—์„œ ๋‚˜์˜จ ๊ณต์‹์ด ์žˆ์ง€๋งŒ, ์—ญ์‹œ๋‚˜ ํ•„์ž๋Š” ํ•œ ๋ฒˆ์— ์ดํ•ด๋ฅผ ํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์”ฉ ๋ถ„์„์„ ํ•ด๋ดค๋‹ค.
๋ˆ„์  ํ•ฉ์˜ ๋ฐฐ์—ด๋„ ์—ญ์‹œ๋‚˜ 2์ฐจ์› ๋ฐฐ์—ด์ผ ์ˆ˜๋ฐ–์— ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๋ฐฐ์—ด ์ž์ฒด๊ฐ€ 2์ฐจ์›์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฐฑ์ค€ 111660 ์˜ˆ์ œ ๋ˆ„์ ํ•ฉ์˜ ๊ฐ’

์ผ๋‹จ ์ผ์ฐจ์› ๋ˆ„์ ํ•ฉ์€ ๊ฐ„๋‹จํ–ˆ๋‹ค. S[i] = S[i-1] + N[i]. ๊ทผ๋ฐ, ์ด ๋ฌธ์ œ๋Š” ์ข€ ๋” ๋ณต์žกํ•˜๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค ๋ˆ„์  ํ•ฉ์˜ ๊ฐ’์„ ์ ์–ด๋ณด์ž๋ฉด ์œ„์™€ ๊ฐ™์€ ์‹์ด๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” N[i][j]๋„ ๋”ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด์œ ๋Š” https://life-study-1031.tistory.com/7 ์—ฌ๊ธฐ์—์„œ ์ž˜ ์„ค๋ช…๋˜์–ด์žˆ์œผ๋‹ˆ ์ฐธ๊ณ  ๋ฐ”๋ž€๋‹ค.

 

[๊ตฌ๊ฐ„ํ•ฉ]๋ฐฑ์ค€ - 11659๋ฒˆ

๋ฌธ์ œ: https://www.acmicpc.net/problem/11659 11659๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4 ์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด

life-study-1031.tistory.com

๋Œ์•„์™€์„œ, ์ผ์ฐจ์›์˜ ๋ˆ„์ ํ•ฉ์„ ์ €์žฅํ•  ๋•Œ๋Š” S[i] = S[i-1] + N[i] ์ด ํ˜•ํƒœ๋กœ ํ–ˆ์—ˆ๋Š”๋ฐ,
์ด๊ฑด 2์ฐจ์› ๋ฐฐ์—ด์ž„์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ธฐ์‹œํ‚ค๋ฉด์„œ ์ƒ๊ฐํ•ด๋ณด์ž,
S[i-1]์„ ๋”ํ•˜๋Š” ์ด์œ ๋Š” ๊ฒฐ๊ตญ ๊ทธ ํ•ญ์ด ์ด๋ฒˆ ํ•ญ ๊ทธ ์ „๊นŒ์ง€์˜ ๋ˆ„์ ํ•ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿผ 2์ฐจ์›์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๊ทธ ์ „ํ•ญ๊นŒ์ง€์˜ ๊ฐ’์„ ๋”ํ•  ์ˆ˜ ์žˆ์„๊นŒ?
๋ฐ”๋กœ ๊ฐ€๋กœ์ค„๊ณผ ์„ธ๋กœ์ค„์„ ํ•˜๋‚˜์”ฉ ์ค„์ธ ๊ฐ’์„ ๋”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์€, ์ด์ฐจ์› ๋ฐฐ์—ด์„ ๋‹ค๋ฃฐ ๋•Œ A[i][j] ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๋‹ค๋ฃจ๊ฒŒ ๋˜๋Š”๋ฐ,
์ด ์›๋ฆฌ๋ฅผ ์ž˜ ์•Œ์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋‹จ๋„์ง์ž…์ ์œผ๋กœ ๋งํ•˜๋ฉด A[(๊ฐ€๋กœ์ค„)][(์„ธ๋กœ์ค„)]์ด๋‹ค.
์ด๊ฑธ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•ด๋ณด์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

2์ฐจ์›๋ฐฐ์—ด์˜ ๊ฐ€๋กœ์ค„๊ณผ ์„ธ๋กœ์ค„ (๋ฐฐ์—ด์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์ˆซ์ž๋Š” N[i][j]๋“ค์„ ๋”ํ•ด์„œ ๋“ค์–ด๊ฐ€์•ผ ํ•  ๊ฐ’์ด๋‹ค.)

๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ๋งŒ์•ฝ์— S(i,j) = S(2,3)์˜ ๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, S(1,3)์€ ๊ฒฐ๊ตญ N(1,1)~N(1,3)๊นŒ์ง€ ๋”ํ•œ ๊ฐ’์ด๋ฉฐ, S(2,2)๋Š” N(1,1)+N(1,2)+N(2,1)+N(2,2)๋ฅผ ๋‹ค ๋”ํ•œ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— 1์ฐจ์› ๋ฐฐ์—ด์—์„œ ํ–ˆ๋˜ ํ˜„์žฌํ•ญ ์ด์ „์˜ ํ•ญ์„ ๋”ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ˆ˜์ˆœ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ํ•œ ์ค„์”ฉ ์ค„์ธ ๊ฒƒ์„ ๋”ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ๊ทธ๋Ÿผ 2๋ฒˆ ๋”ํ•ด์ง€๋Š” ๋ถ€๋ถ„์ด ์ƒ๊ธธ ํ…๋ฐ, ๊ทธ ๋ถ€๋ถ„์€ ๋นผ์ค˜์•ผ ํ•˜์ง€ ์•Š์€๊ฐ€? ๊ทธ๋ž˜์„œ ํ˜„์žฌ ํ•ญ์˜ ๋Œ€๊ฐ์„ ์— ์žˆ๋Š” ํ•ญ์€ ๋นผ์ค€๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด S(2,3)์„ ๊ตฌํ•œ๋‹ค๊ณ  ํ•ด๋ณด๋ฉด, N(1,1), N(1,2)๋Š” ์ค‘๋ณต์œผ๋กœ ๋”ํ•ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๋ถ€๋ถ„์„ ๋นผ์ฃผ๊ธฐ ์œ„ํ•ด ๋Œ€๊ฐ์„ ์— ์žˆ๋Š” ํ•ญ์„ ๋นผ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ ๋‚จ์€ ๊ฑด ํ•˜๋‚˜๋‹ค.
์˜ˆ์ œ์—์„œ ๋‚˜์˜ค๋Š” S(2,2) ~ S(3,4)๊นŒ์ง€์˜ ํ•ฉ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ•  ๊ฒƒ์ด๋ƒ?

์ด๊ฒƒ๋„ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ํŽธํ•˜๋‹ค.

๋ˆ„์ ํ•ฉ ๋ฐฐ์—ด์—์„œ ์ผ๋ถ€๋ถ„์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ฐˆ์ƒ‰์œผ๋กœ ์น ํ•œ ๋ถ€๋ถ„์ด N(1,1) ~ N(3,4)๊นŒ์ง€ ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’์ด๊ณ , ๋ถ„ํ™์ƒ‰์€ ๊ฑฐ๊ธฐ์—์„œ N(1,1) ~ N(1,4)๊นŒ์ง€ ๋”ํ•œ ๊ฐ’์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋ณด๋ผ์ƒ‰์€ N(1,1) ~ N(3,1)๊นŒ์ง€ ๋”ํ•œ ๊ฐ’์ด๋‹ค.
์ฆ‰, ์šฐ๋ฆฌ๋Š” ์ € ๊ฐ’๋“ค์„ ๋นผ์•ผ N(2,2) ~ N(3,4)๊นŒ์ง€์˜ ๊ฐ’์„ ๋”ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹ค๋งŒ ๊ทธ๋Ÿฌ๋ฉด ๋‘ ๋ฒˆ ๋นผ๊ฒŒ ๋˜๋Š” ๊ฐ’์ด ์žˆ๋‹ค. ๋ฐ”๋กœ N(1,1), N(1,2)์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ์— ์ž…๋ ฅ๋ฐ›๋Š” x,y ๊ฐ’์—์„œ 1์”ฉ ๋นผ์ฃผ๋ฉด ๋‘ ๋ฒˆ ๋นผ๊ฒŒ ๋˜๋Š” ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๊ณ , ๊ทธ๊ฑธ ๋”ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ์˜ค๋Š๋ผ ์ •๋ง ๋จธ๋ฆฌ๊ฐ€ ํ„ฐ์งˆ ๊ฒƒ ๊ฐ™์€ ๊ธฐ๋ถ„ ๋„ˆ๋ฌด ์ž˜ ์•ˆ๋‹ค. ์ด์ œ ์ง„์งœ ๋‹ค ์™”๋‹ค.
์šฐ๋ฆฌ๋Š” ์ด๊ฑธ๋กœ 2๊ฐ€์ง€๋ฅผ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
โ‘  2์ฐจ์› ๋ฐฐ์—ด์—์„œ ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ตฌํ•˜๋Š” ์‹:
     S[(๊ฐ€๋กœ์ค„)][(์„ธ๋กœ์ค„)] = S[(๊ฐ€๋กœ์ค„)-1][(์„ธ๋กœ์ค„)] + S[(๊ฐ€๋กœ์ค„)][(์„ธ๋กœ์ค„)-1] - S[(๊ฐ€๋กœ์ค„)-1][(์„ธ๋กœ์ค„)-1]
โ‘ก ์งˆ์˜์— ๋Œ€ํ•œ ๋‹ต์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์‹(x1, y1์€ ์ฒ˜์Œ์— ์ž…๋ ฅ๋ฐ›๋Š” ์ขŒํ‘œ, x2, y2๋Š” ๋‘ ๋ฒˆ์งธ๋กœ ์ž…๋ ฅ๋ฐ›๋Š” ์ขŒํ‘œ): 
     S[x2][y2] - S[x1-1][y2] - S[x2][y1-1] + S[x1-1][y1-1]

์ด๊ฑธ ์ฝ”๋”ฉ์œผ๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import java.io.*;
import java.util.*;

public class BOJ_11660 {

	public static void main(String[] args) throws IOException{
		// TODO ๋ฐฑ์ค€ 11660
		
        //์ž…๋ ฅ์„ ๋นจ๋ฆฌ ๋ฐ›๊ธฐ ์œ„ํ•ด BufferedReader ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•จ.
        //์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜๊ธฐ ์œ„ํ•ด StringTokenizer ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•จ.
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		int[][] nums = new int[N+1][N+1];
		long[][] sums = new long[N+1][N+1];

		//์ˆซ์ž ์ž…๋ ฅ๋ฐ›๊ณ  ํ•ฉ ๊ตฌํ•˜๊ธฐ
		for(int i=1; i<=N; i++) {
			st = new StringTokenizer(br.readLine());
			for(int j=1; j<=N; j++) {
				nums[i][j] = Integer.parseInt(st.nextToken());
				sums[i][j] += sums[i-1][j] + sums[i][j-1] - sums[i-1][j-1] + nums[i][j];
			}
		}
		
		//๋‹ต ๊ตฌํ•˜๊ธฐ
		for(int i=0; i<M; i++) {
			st = new StringTokenizer(br.readLine());
			int x1 = Integer.parseInt(st.nextToken());
			int y1 = Integer.parseInt(st.nextToken());
			int x2 = Integer.parseInt(st.nextToken());
			int y2 = Integer.parseInt(st.nextToken());
			
			System.out.println(sums[x2][y2] - sums[x1-1][y2] - sums[x2][y1-1] + sums[x1-1][y1-1]);
		}
	}
}
728x90
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ: https://www.acmicpc.net/problem/11659

 

11659๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ตฌ๊ฐ„ i์™€ j

www.acmicpc.net


ํ•„์ž๋Š” ์ฒ˜์Œ์— ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์ „์—, ๊ตฌ๊ฐ„ ํ•ฉ์˜ ํ•ต์‹ฌ ์ด๋ก  ๋ถ€๋ถ„์˜ ํ•ฉ ๋ฐฐ์—ด S๋ฅผ ๋งŒ๋“œ๋Š” ๊ณต์‹์ด ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค. 
๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๋”ฐ๋ผ ์น˜๊ณ  ๋„˜๊ฒผ์—ˆ๋Š”๋ฐ, ์ด๋Ÿฐ ์Šต๊ด€์€ ์ข‹์ง€ ์•Š์€ ์Šต๊ด€์ด๋ผ๊ณ  ํ”ผ๋“œ๋ฐฑ๋ฐ›์•„,
ํ•˜๋‚˜ํ•˜๋‚˜ ๋ถ„์„ํ•˜๋ฉด์„œ ๋‹ค์‹œ ํ’€๊ณ  ๋˜ ํ’€๊ณ  ๊ทธ๋žฌ์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ 2๋ฒˆ ์ •๋„ ํ’€์—ˆ์„ ๋•Œ๋Š” ๊ทธ ๊ณต์‹๊ณผ ์œ ์‚ฌํ•œ ์ฝ”๋“œ๋ฅผ ์งฐ์œผ๋ฉฐ,
3๋ฒˆ์งธ์—๋Š” ๊ณต์‹๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค. ์‚ฌ์‹ค ๊ณต์‹์ด๋ผ๊ธฐ ๋ณด๋‹จ ๊ทธ๋ƒฅ ๋ˆ„์ ํ•ฉ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ˆ๊นŒ ๊ณต์‹์˜ ํ˜•ํƒœ๋กœ
์ ํ˜€์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ธ์ง€๋Š” ํ•˜๋‚˜ํ•˜๋‚˜ ๋ถ„์„์„ ํ•˜๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ทธ๊ฑธ ์•Œ์•„๋ณด์ž.

์šฐ์„  ๋ˆ„์ ํ•ฉ์ด๋ž€ ๋‹จ์–ด์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐ์„ ํ•ด๋ด์•ผ ํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž๊ฐ€ [1, 2, 3, 4, 5]๊ฐ€ ์žˆ์œผ๋ฉด ๋ˆ„์ ํ•ฉ์€ [1, 1+2, 1+2+3,... , 1+2+3+4+5]
์ด๋Ÿฐ ์‹์œผ๋กœ ํ•˜๋‚˜์”ฉ ๋”ํ•ด๊ฐ€๋Š” ํ•ฉ์˜ ํ˜•ํƒœ์ด๋‹ค.

์ฆ‰, ํ•ญ์ด ํ•˜๋‚˜์”ฉ ๋Š˜์–ด๋‚  ๋•Œ๋งˆ๋‹ค, ํ•ด๋‹นํ•˜๋Š” ํ•ญ์— ์žˆ๋Š” ์ˆซ์ž๋ฅผ ๋”ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ฑ…์—์„œ ์„ค๋ช…ํ•œ ํ•ฉ ๋ฐฐ์—ด ๊ณต์‹์˜ ์›๋ฆฌ๋ฅผ ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ ์ดํ•ด๋ฅผ ํ•œ ๊ฒƒ์ด๋‹ค.
ํ•ฉ ๋ฐฐ์—ด์„ S, ์ˆซ์ž ๋ฐฐ์—ด์„ N์ด๋ผ๊ณ  ๋‘”๋‹ค๋ฉด, S[(ํ˜„์žฌ ํ•ญ)] = S[(์ด์ „ ํ•ญ)] + N[(ํ˜„์žฌํ•ญ)] ์ด๋ ‡๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๋‚ด์šฉ์„ ๊ธฐ์–ตํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ๋ด๋ณด์ž.
๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์ž…๋ ฅ๋ฐ›๋Š” ์ฒซ๋ฒˆ์งธ ๊ฐ’๋ถ€ํ„ฐ ๋‘ ๋ฒˆ์งธ ๊ฐ’๊นŒ์ง€์˜ ๊ฐ’์„ ์š”๊ตฌํ•˜๊ณ  ์žˆ๋‹ค.
์˜ˆ์ œ์— ๋‚˜์˜จ ๊ฒƒ์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, [5,4,3,2,1]์˜ ๋ˆ„์ ํ•ฉ์€ [5, 9, 12, 14, 15]์ด๋‹ค.
์—ฌ๊ธฐ์—์„œ 1ํ•ญ~3ํ•ญ๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ•ด๋ณด๋ฉด, 12๊ฐ€ ๊ทธ ๋‹ต์ด ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด 1~3ํ•ญ์„ ๋ˆ„์ ํ•ด์„œ ๋”ํ•œ ๊ฒŒ 12์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋Ÿผ 2ํ•ญ~4ํ•ญ๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? 2๋ฒˆ์งธ ํ•ญ์—์„œ 4๋ฒˆ์งธ ํ•ญ๊นŒ์ง€ ๋”ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์ผ๋‹จ 1ํ•ญ~4๋ฒˆ์งธ ํ•ญ๊นŒ์ง€ ๋”ํ•œ ๊ฒƒ์—์„œ 1ํ•ญ์˜ ๊ฐ’์„ ๋นผ๋ฉด ๋˜๋ฏ€๋กœ, 14-5 = 9 ์ด๋ ‡๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
5ํ•ญ ~ 5ํ•ญ๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค๋ฉด ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 1๋ฒˆ์งธ ํ•ญ์—์„œ 5๋ฒˆ์งธ ํ•ญ๊นŒ์ง€ ๋”ํ•œ ๊ฒƒ์—์„œ 4๋ฒˆ์งธ ํ•ญ๊นŒ์ง€ ๋”ํ•œ ๊ฒƒ์„ ๋นผ๋ฉด ๋˜๋ฏ€๋กœ, 15-14=1 ์ด๋ ‡๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
์ฒซ ๋ฒˆ์งธ ํ•ญ๋ถ€ํ„ฐ ๋”ํ•œ ๊ฒƒ๊ณผ ์ตœ์†Œ ๋‘ ๋ฒˆ์งธ ํ•ญ๋ถ€ํ„ฐ ๋”ํ•œ ๊ฒƒ์„ ๊ตฌ๋ณ„์„ ํ•ด์•ผ ํ•œ๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฑ…์—์„œ ์†Œ๊ฐœํ•˜๋Š” ๋ˆ„์  ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ [0, 5, 9, 12, 14, 15] ์ด๋ ‡๊ฒŒ ๋˜์–ด์žˆ๋‹ค.
์ฆ‰, 1ํ•ญ~3ํ•ญ๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•  ๋•Œ์—๋Š” 1ํ•ญ~3ํ•ญ๊นŒ์ง€ ๋”ํ•œ ๊ฐ’์ธ 12์—์„œ 0์„ ๋นผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ 12์ผ ํ…Œ๋‹ˆ๊นŒ.

๊ทธ๋Ÿผ ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐœ์˜ ํŒจํ„ด์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์ฒซ ๋ฒˆ์งธ๋กœ ์ž…๋ ฅ๋ฐ›๋Š” ํ•ญ์„ i๋ผ๊ณ  ํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ๋กœ ์ž…๋ ฅ๋ฐ›๋Š” ํ•ญ์„ j๋ผ๊ณ  ํ•˜์ž.
โ‘  S[(ํ˜„์žฌ ํ•ญ)] = S[(์ด์ „ ํ•ญ)] + N[(ํ˜„์žฌํ•ญ)] = S[(ํ˜„์žฌํ•ญ)] = S[(ํ˜„์žฌํ•ญ - 1)] + N[(ํ˜„์žฌํ•ญ)]
โ‘ก S[j] - S[i-1]

์ด์ „ํ•ญ์ด ์™œ ํ˜„์žฌํ•ญ - 1์ด๋ƒ๋ฉด, ์ด๊ฑธ ์ธ๋ฑ์Šค๋กœ ์ƒ๊ฐํ–ˆ์„ ๋•Œ,
์˜ˆ๋ฅผ ๋“ค์–ด 2๊ฐ€ ํ˜„์žฌ ํ•ญ์ด๋ผ ๊ฐ€์ •ํ•˜๋ฉด, S[2] = S[1] + N[2] ์ด๋Ÿฐ ํ˜•์‹์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

import java.util.*;
import java.io.*;

public class BOJ_11659 {

	public static void main(String[] args) throws IOException{
		// TODO ๋ฐฑ์ค€ 11659
		
        //์ž…๋ ฅ์„ ๋นจ๋ฆฌ ๋ฐ›๊ธฐ ์œ„ํ•ด BufferedReader ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•จ.
        //BufferedReader ํด๋ž˜์Šค๋Š” ํ•œ ์ค„ ๋‹จ์œ„๋กœ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—
        //StringTokenizer ํด๋ž˜์Šค๋กœ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•ด์ค˜์•ผ ํ•จ
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
        //N = ํ•ญ์˜ ๊ฐœ์ˆ˜
        //M = ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•œ ๊ฒƒ๋“ค์ด ๋ช‡ ๊ฐœ์ธ์ง€(์งˆ์˜๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€)
        //sums = ๋ˆ„์ ํ•ฉ์„ ์ €์žฅํ•  ๋ฐฐ์—ด ๋ณ€์ˆ˜
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken()); 
		long[] sums = new long[N+1];
		
        //๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ
		st = new StringTokenizer(br.readLine());
		for(int i=1; i<=N; i++) {
			sums[i] = sums[i-1] + Integer.parseInt(st.nextToken());
		}
		
        //์งˆ์˜์—์„œ ์š”๊ตฌํ•˜๋Š” ํ•ญ๋“ค์„ ์ž…๋ ฅ๋ฐ›๊ณ 
        //ํ•ฉ์„ ์ถœ๋ ฅํ•จ
		for(int i=0; i<M; i++) {
			st = new StringTokenizer(br.readLine());
			int index1 = Integer.parseInt(st.nextToken());
			int index2 = Integer.parseInt(st.nextToken());
			
			System.out.println(sums[index2] - sums[index1-1]);
		}
	}
}
728x90
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ: https://www.acmicpc.net/problem/1546

 

1546๋ฒˆ: ํ‰๊ท 

์ฒซ์งธ ์ค„์— ์‹œํ—˜ ๋ณธ ๊ณผ๋ชฉ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๊ฐ’์€ 1000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋‘˜์งธ ์ค„์— ์„ธ์ค€์ด์˜ ํ˜„์žฌ ์„ฑ์ ์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๊ฐ’์€ 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜์ด๊ณ , ์ ์–ด๋„ ํ•˜๋‚˜์˜ ๊ฐ’์€ 0๋ณด

www.acmicpc.net


์ด ๋ฌธ์ œ๋Š” ์ฒ˜์Œ์— ๋ดค์„ ๋•Œ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ์˜€๋‹ค.

ํ•„์ž๋Š” ์ฑ…์— ์žˆ๋Š” ๋ฌธ์ œ ๋ถ„์„ํ•˜๊ธฐ ํŒŒํŠธ๋ฅผ ์ฝ์–ด๋„ ํ—ค๋งธ๋Š”๋ฐ,
๊ทธ ์ด์œ ๊ฐ€ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์—์„œ ์ ์ˆ˜/์ตœ๋Œ“๊ฐ’*100์„ ํ•˜๋ฉด 0์•„๋‹Œ๊ฐ€???
์ด๋Ÿฌ๋ฉด์„œ ์˜ˆ์ œ ์ถœ๋ ฅ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค.
๊ทผ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‹จํ†ก๋ฐฉ์— ๊ณ„์‹  ๋ถ„๋“ค ์ค‘ doubleํ˜•์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ผ๊ณ  ์กฐ์–ธํ•ด์ฃผ์‹  ๋ถ„ ๋•๋ถ„์— ํ•œ๋ฒˆ์— ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค.

๋ฌธ์ œ์—์„œ ์˜ˆ์‹œ๋ฅผ ๋“  ์ˆ˜ํ•™์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์€ 50/70*100์ธ๋ฐ, ์ด๊ฑธ intํ˜•์œผ๋กœ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด 0์œผ๋กœ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.
ํ•˜์ง€๋งŒ, double ํ˜•์œผ๋กœ ๋ฐ”๊พธ๋ฉด 71.43์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณด๋ฉด,
์ด ๊ฐ’์€ 0.7143xxx ์ด๋Ÿฐ ์‹์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ์‹์€ ๊ฐ (๊ณผ๋ชฉ์˜ ์ ์ˆ˜๋“ค์˜ ํ•ฉ/๊ณผ๋ชฉ์ˆ˜) ์ด๊ฑด๋ฐ,
์—ฌ๊ธฐ์—์„  ๊ฐ ๊ณผ๋ชฉ์˜ ์ ์ˆ˜๋“ค(์›์ ์ˆ˜)์„ ๊ฐ๊ฐ A,B,C๋ผ๊ณ  ๋ณด๊ณ , ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜๋ฅผ max๋ผ ์ƒ๊ฐํ•ด๋ณด์ž.

์˜ˆ์ œ ์‹ ํ•ด์„ค

์ด๋Ÿฐ์‹์œผ๋กœ ๊ณ„์‚ฐ์ด ๋˜๋Š”๋ฐ, ๋ถ€๋„๋Ÿฝ์ง€๋งŒ ํ•„์ž๋Š” ์—„์ฒญ๋‚œ ์ˆ˜ํฌ์ž์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ฑ…์— ์žˆ๋Š” (A+B+C)*100/max/3 ์ด๊ฒŒ ํ•œ๋ˆˆ์— ์•ˆ๋“ค์–ด์™€์„œ ์ง์ ‘ ํ•ด์ฒดํ–ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค. ํ•„์ž๋Š” (A+B+C)*100/3*max ์ด๋ ‡๊ฒŒ ๋˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€ ์ƒ๊ฐ์„ ํ–ˆ์—ˆ๋Š”๋ฐ,
๊ด„ํ˜ธ๋ฅผ (A+B+C)*100/(3*max) ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋งž๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒซ๋ฒˆ์งธ์— ์žˆ๋Š” ๊ฒฐ๊ณผ๊ฐ€ (A+B+C)*100/(3*max) ์ด ์‹์œผ๋กœ ํ‘ผ ๊ฒฐ๊ณผ์ด๋‹ค.

์ž ๊ทธ๋Ÿผ ์ด์ œ ์ฝ”๋”ฉ์œผ๋กœ ๋„˜์–ด์™€๋ณด์ž. ์ฝ”๋”ฉ์œผ๋กœ๋Š” 2๊ฐœ์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.
โ‘  ์ตœ๋Œ€๊ฐ’ ๊ตฌํ•˜๊ธฐ - Arrays ํด๋ž˜์Šค์— ์žˆ๋Š” sort ํ•จ์ˆ˜๋ฅผ ์จ๋„ ๋˜๊ณ , for๋ฌธ์œผ๋กœ ์ฐพ์•„๋„ ๋œ๋‹ค.
โ‘ก ๋ฐฐ์—ด์— ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ณ  ํ•ฉ์„ ๊ตฌํ•˜๊ธฐ

1๋ฒˆ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” 2๊ฐ€์ง€์˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, sort๋ฒ„์ „๊ณผ for๋ฌธ ๋ฒ„์ „์˜ ๊ฒฐ๊ณผ์™€ ์ฝ”๋”ฉ์€ ๋ฐ‘์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
2๋ฒˆ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์ž…๋ ฅ๋ฐ›๋Š” ๊ฒƒ์„ ์ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์— ๋„ฃ์œผ๋ฉด ๋˜๋Š”๋ฐ Scanner๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด scores[i] = sc.nextInt(); ๋กœ ์“ธ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

๋”ฐ๋ผ์„œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž๋ฉด,

//๋ฒ„์ „ 1. for๋ฌธ ์‚ฌ์šฉํ•ด์„œ ์ตœ๋Œ€๊ฐ’ ์ฐพ๊ธฐ

import java.io.*;
import java.util.*;

public class BOJ_1546 {

	public static void main(String[] args) throws IOException{
		// TODO ๋ฐฑ์ค€ 1546
		
        //์ž…๋ ฅ์„ ๋นจ๋ฆฌ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ BufferedReader ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์ค€๋‹ค.
        //BufferedReader ํด๋ž˜์Šค๋กœ ์ด์šฉํ•œ ์ž…๋ ฅ์€ ํ•œ ์ค„ ๋‹จ์œ„๋กœ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด ํŒŒ์‹ฑ์ด ํ•„์š”ํ•จ
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
        //N์€ ๊ณผ๋ชฉ ์ˆ˜, sum์€ ์ ์ˆ˜์˜ ์ดํ•ฉ(๊ฐ€๊ณตx), max๋Š” ์ ์ˆ˜์˜ ์ตœ๋Œ€๊ฐ’์„ ์ €์žฅํ•  ๋ณ€์ˆ˜์ด๋‹ค.
        //scores ๋ฐฐ์—ด์€ ์ ์ˆ˜๋“ค์„ ์ €์žฅํ•  ๋ฐฐ์—ด์ด๋‹ค.
		int N = Integer.parseInt(st.nextToken());
		int sum = 0, max = 0;
		int[] scores = new int[N];
		
        //์ ์ˆ˜ ๋ฐฐ์—ด์— ์ž…๋ ฅ๋ฐ›์€ ์ ์ˆ˜๋“ค์„ ์ €์žฅํ•ด์ฃผ๊ณ ,
        //๊ทธ ์ ์ˆ˜๋“ค์„ ๋‹ค ๋”ํ•ด์ค€๋‹ค.
        //๋งŒ์•ฝ์— max๋ณ€์ˆ˜๊ฐ€ scores[i] ๋ณด๋‹ค ์ž‘์œผ๋ฉด max์— scores[i]๋ฅผ ์ €์žฅํ•ด์ค€๋‹ค.
		st = new StringTokenizer(br.readLine());
		for(int i=0; i<N; i++) { 
			scores[i] = Integer.parseInt(st.nextToken());
			sum += scores[i];
			if(max < scores[i]) {
				max = scores[i];
			}
		}
		
        //ํ‰๊ท  ์ถœ๋ ฅ
		System.out.println((double)sum*100/max/N);
	}
}

2๋ฒˆ์งธ ์ฝ”๋“œ.

//๋ฒ„์ „ 2. Arrays.sort()๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class BOJ_1546_ver2 {

	public static void main(String[] args) throws IOException{
		// TODO ๋ฐฑ์ค€ 1546
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken());
		int sum = 0, max = 0;
		int[] scores = new int[N];
		
		st = new StringTokenizer(br.readLine());
		for(int i=0; i<N; i++) {
			scores[i] = Integer.parseInt(st.nextToken());
			sum += scores[i];
		}
		
        //๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ๊ณ  ์ตœ๋Œ€๊ฐ’์„ ์ €์žฅํ•ด์ค€๋‹ค.
		Arrays.sort(scores);
		max = scores[N-1];
		
        //์ €์žฅ๋œ ์ตœ๋Œ€๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
		System.out.println((double)sum*100/max/N);
	}
}

sort๋กœ ํ•œ ๊ฒƒ๊ณผ for๋ฌธ์œผ๋กœ ํ•œ ๊ฒƒ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฐจ์ด์™€ ์‹œ๊ฐ„

์ฒซ๋ฒˆ์งธ๊ฐ€ sort ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฐ๊ณผ, ๋‘๋ฒˆ์งธ๊ฐ€ for๋ฌธ์„ ์‚ฌ์šฉํ•œ ๊ฒฐ๊ณผ์ด๋‹ค.

์–ด? if๋ฌธ์ด ์ค„์—ˆ๋Š”๋ฐ, ์™œ sort๊ฐ€ ๋” ๋ฉ”๋ชจ๋ฆฌ์™€ ์‹œ๊ฐ„์„ ๋” ์žก์•„๋จน์ง€? ์— ๋Œ€ํ•ด์„œ ๊ถ๊ธˆํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๊ฑด ํ•„์ž๊ฐ€ JAVA_travel์—์„œ ์ฐจํ›„์— ๋‹ค๋ฃฐ ๋‚ด์šฉ์ด๊ธด ํ•œ๋ฐ,
sort๋Š” ์™œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ข€ ๋” ์žก์•„๋จน์„๊นŒ? ์— ๋Œ€ํ•œ ํƒ๊ตฌ๋ฅผ ํ•  ์˜ˆ์ •์ด๋‹ค.

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

๋ฌธ์ œ: https://www.acmicpc.net/problem/11720

 

11720๋ฒˆ: ์ˆซ์ž์˜ ํ•ฉ

์ฒซ์งธ ์ค„์— ์ˆซ์ž์˜ ๊ฐœ์ˆ˜ N (1 ≤ N ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ์ˆซ์ž N๊ฐœ๊ฐ€ ๊ณต๋ฐฑ์—†์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net


ํ‡ด์‚ฌํ•  ๋•Œ ์ฆˆ์Œ ๊ตฌ๋งคํ•ด๋†จ๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฑ…์ด ์žˆ๋‹ค.
http://www.yes24.com/Product/Goods/108571508

 

Do it! ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ž๋ฐ” ํŽธ - YES24

IT ๊ธฐ์—… ์ทจ์—…๊ณผ ์ด์ง์˜ ํ•„์ˆ˜ ๋‹จ๊ณ„์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ!์ถœ์ œ ๊ฒฝํ–ฅ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋ฐ˜์˜ํ•œ ํ•ต์‹ฌ 100์ œ๋กœ ํ•œ ๋ฒˆ์— ํ•ฉ๊ฒฉํ•œ๋‹ค!“์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์ค€๋น„ํ•ด์•ผ ํ• ๊นŒ?” ๊ณง ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์•ž๋‘๊ณ  ์žˆ๊ฑฐ

www.yes24.com

์ด ์ฑ…์ธ๋ฐ, ์—ฌ๊ธฐ์—์„œ ๋‚˜์˜ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ํŒŒํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ œ๊ฐ€ ๋ฐ”๋กœ ์ง€๊ธˆ ๋ฌธ์ œ๋‹ค.

์ฒ˜์Œ์—๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์—„์ฒญ ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•ด์„œ BufferedReader๋ฅผ ์ด์šฉํ•ด์„œ ์ž…๋ ฅ์„ ๋ฐ›์€ ๋‹ค์Œ, StringTokenizer ํด๋ž˜์Šค๋กœ ์ˆซ์ž๋“ค์„ ํŒŒ์‹ฑํ•  ์ƒ๊ฐ์ด์—ˆ๋Š”๋ฐ.. ๋ณด๋‹ˆ๊นŒ ๊ณต๋ฐฑ์—†์ด ์ž…๋ ฅ์„ ๋ฐ›๋Š” ๊ฒƒ์ด์–ด์„œ ์ ์ž–์ด ๋‹นํ™ฉํ–ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ฑ…์—์„œ๋„ ์ฐพ์•„๋ณด๊ณ , ๊ตฌ๊ธ€๋ง๋„ ํ•ด๋ณธ ๊ฒฐ๊ณผ, ์ด ๋ฌธ์ œ๋Š” char ์ž๋ฃŒํ˜• ๋ฐฐ์—ด๋กœ ์ €์žฅํ•ด์„œ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.
์ฆ‰, ASCII(์•„์Šคํ‚ค)์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ธ ๊ฒƒ์ด๋‹ค.

ASCII์ฝ”๋“œ๋ž€, ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ์ˆซ์ž์ด๋‹ค. ์—‡? ์ธ์ฝ”๋”ฉ? ์ธ์ฝ”๋”ฉ์ด๋ž€ ๋‹จ์–ด์— ๋ณต์žกํ•จ์„ ๋Š๋‚„ ํ•„์š”๋Š” ์—†๋‹ค.
์ธ์ฝ”๋”ฉ์€ ๋ฌธ์ž๋‚˜ ๊ธฐํ˜ธ๋“ค์„ ์ปดํ“จํ„ฐ๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
https://ko.wikipedia.org/wiki/ASCII

 

ASCII - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. 1972 ํ”„๋ฆฐํ„ฐ ์‚ฌ์šฉ ์„ค๋ช…์„œ์— ๊ฐœ์‹œ๋œ ์•„์Šคํ‚ค ์ฝ”๋“œ ์ฐจํŠธํ‘œ ๋ฏธ๊ตญ์ •๋ณด๊ตํ™˜ํ‘œ์ค€๋ถ€ํ˜ธ(์˜์–ด: American Standard Code for Information Interchange), ๋˜๋Š” ์ค„์—ฌ์„œ ASCII( , ์•„์Šคํ‚ค)๋Š” ์˜๋ฌธ

ko.wikipedia.org

๋ฐฑ์ค€์˜ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์€ ์œ„ํ‚ค๋ฐฑ๊ณผ์˜ <์ถœ๋ ฅ๊ฐ€๋Šฅ ์•„์Šคํ‚ค ์ฝ”๋“œํ‘œ> ๋ถ€๋ถ„์ด๋‹ค.
๋ณด๋ฉด ์ˆซ์ž 0์€ ASCII ์ฝ”๋“œ๋กœ 15์ด๋ฉฐ, 1,2,3 ... ์ด๋ ‡๊ฒŒ ๊ฐˆ ์ˆ˜๋ก ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ€ 1์”ฉ ๋Š˜์–ด๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์˜ˆ์ œ ์ž…๋ ฅ์ค‘ 54321์„ ์ž…๋ ฅ์„ ๋ฐ›์œผ๋ฉด, ์ด๊ฑด String ํ˜•ํƒœ๋กœ ์ž…๋ ฅ์„ ๋ฐ›๊ณ , char ๋ฐฐ์—ด์— ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ char[0] = 5, char[1] = 4 ... ์ด๋Ÿฐ ์‹์œผ๋กœ ๋„ฃ์–ด์ค€ ๋‹ค์Œ, ๊ทธ ํ•ฉ์„ ์ €์žฅํ•˜๋Š” sum์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ sum += char[i]-'0' ์œผ๋กœ ํ•˜๋ฉด 15๊ฐ€ ๋น ์ง€๊ธฐ ๋•Œ๋ฌธ์— 1์€ 16-15 = 1์ด ๋˜๊ณ , 2๋Š” 17-15 = 2 ์ด๋Ÿฐ์‹์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด,

char[] nums์— ์ž…๋ ฅ๋ฐ›์€ ๊ฒƒ๋“ค์„ ๊ตฌ๋ถ„ํ•ด์„œ ๋„ฃ์€ ๋ชจ์Šต

์ด๊ฑธ ์ฝ”๋“œ๋กœ ํ‘œํ˜„์„ ํ•ด๋ณด์ž๋ฉด,

import java.io.*;
import java.util.*;

public class BOJ_11720 {

	public static void main(String[] args) throws IOException{
		//TODO ๋ฐฑ์ค€ 11720
		
        //์ž…๋ ฅ์„ ๋น ๋ฅด๊ฒŒ ๋ฐ›๊ธฐ ์œ„ํ•ด BufferedReader ํด๋ž˜์Šค์™€ 
        //์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜๊ธฐ ์œ„ํ•ด StringTokenizerํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์ค€๋‹ค.
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
        //N์€ ์ˆซ์ž์˜ ๊ฐœ์ˆ˜, nums_string์€ ์ž…๋ ฅ๋ฐ›๋Š” ์ˆซ์ž๋“ค์„ ์ €์žฅํ•  ๋ณ€์ˆ˜์ด๋‹ค.
        //nums_char๋Š” ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž๋“ค์„ charํ˜•์œผ๋กœ ์ €์žฅํ•  ๋ณ€์ˆ˜์ด๋‹ค.
        //sum์€ ๊ทธ ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ๋ชจ๋‘ ๋”ํ•ด์ค„ ๋ณ€์ˆ˜์ด๋‹ค.
		int N = Integer.parseInt(st.nextToken());
		String nums_string = br.readLine();
		char[] nums_char = new char[N];
		int sum = 0;
		
        //String์€ ๋ฌธ์ž"์—ด"์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๊ธธ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฌธ์ž์—ด = ๋ฌธ์ž๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด)
        //.charAt()์€ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž๋ฅผ char๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.
		for(int i=0; i<nums_string.length(); i++) {
			nums_char[i] = nums_string.charAt(i);
			sum += nums_char[i]-'0';
		}
		
        //char ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ๋ชจ๋‘ ๋”ํ•œ sum์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.
		System.out.println(sum);
	}
}

BufferedReader์™€ Scanner์˜ ์ฐจ์ด๋Š” ๋‚˜์ค‘์— JAVA_travel ์นดํ…Œ๊ณ ๋ฆฌ์— ์ž์„ธํžˆ ์ž‘์„ฑํ•  ๊ฒƒ์ด์ง€๋งŒ,
๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด Scanner ํด๋ž˜์Šค๋ณด๋‹ค BufferedReader ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๊ฒŒ ํ›จ์”ฌ ๋น ๋ฅด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ž…๋ ฅ์„ ๋ฐ›๋Š”๊ฒŒ ์žˆ์œผ๋ฉด ๋‹น์—ฐํžˆ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ๋„ ์žˆ์„๊ฑด๋ฐ, ๊ทธ ํด๋ž˜์Šค๊ฐ€ ๋ฐ”๋กœ BufferedWriter ๋ผ๋Š” ํด๋ž˜์Šค๋‹ค.
์ด๊ฒƒ๋„ System.out.println() ๋ณด๋‹ค ๋น ๋ฅธ๋ฐ, ์ด๊ฒƒ๋„ JAVA_travel ์นดํ…Œ๊ณ ๋ฆฌ์— ์ž‘์„ฑํ•  ์˜ˆ์ •์ด๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

+ Recent posts