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

+ Recent posts