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

+ Recent posts