๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 1449๋ฒˆ: ์ˆ˜๋ฆฌ๊ณต ํ•ญ์Šน(๊ทธ๋ฆฌ๋””, ์ •๋ ฌ)

by ์ฃผ๋ฐœ2 2020. 2. 27.
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/1449

 

1449๋ฒˆ: ์ˆ˜๋ฆฌ๊ณต ํ•ญ์Šน

์ฒซ์งธ ์ค„์— ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์˜ ๊ฐœ์ˆ˜ N๊ณผ ํ…Œ์ดํ”„์˜ ๊ธธ์ด L์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N๊ณผ L์€ 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์˜ ์œ„์น˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

ํ‹€๋ฆฐ ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
		int N = Integer.parseInt(st.nextToken());	// ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์˜ ๊ฐœ์ˆ˜
		int L = Integer.parseInt(st.nextToken());	// ํ…Œ์ดํ”„ ๊ธธ์ด
		int min = 0;	// ํ•„์š”ํ•œ ํ…Œ์ดํ”„์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜
		int[] arr = new int[N];
		st = new StringTokenizer(bf.readLine());
		for(int i=0; i<arr.length; i++) {
			arr[i] = Integer.parseInt(st.nextToken()); 
		}
		
		Arrays.sort(arr);
		for(int i=0; i<arr.length-1; i++) {
			/*
			 * ๋ฌผ์ด ์ƒˆ๋Š” ๋‘ ๊ณณ์˜ ์œ„์น˜ ์ฐจ์ด๊ฐ€ ํ…Œ์ดํ”„-1์˜ ๊ธธ์ด์™€ ๋™์ผํ•˜๋‹ค๋ฉด ?
			 * L = 2์ด๊ณ , ๋ฌผ์ด ์ƒˆ๋Š” ๋‘ ์œ„์น˜๊ฐ€ 1, 2 ์ผ๋•Œ
			 * 0.5 | 1 | 1.5 | 2 | 2.5 (0.5 ~ 2.5 = 2 = L)
			 * ์œ„์™€ ๊ฐ™์ด ๋ฌผ์ด ์ƒˆ๋Š” ๋‘ ๊ณณ์„ ํ…Œ์ดํ”„ ํ•˜๋‚˜๋กœ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.
			 * ๋”ฐ๋ผ์„œ ํ…Œ์ดํ”„ +1 , ๋ฌผ์ด ์ƒˆ๋Š” ์œ„์น˜ ํ•˜๋‚˜ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
			 */
			if(arr[i+1] - arr[i] == (L-1)) {
				min ++;
				i ++;
			}
			else {
				min ++;
			}
		}
		System.out.println(min);
		bf.close();
	}

}

์ดํ•ด

๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋Š” ๋ฌธ์ œ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์ ค ์šฐ์„ ์ธ ๊ฒƒ ๊ฐ™๋‹ค... ์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ดค์„๋•Œ ์ดํ•ด๊ฐ€ ์•ˆ๋ผ์„œ ์ฝ์–ด๋ณด๊ณ  ์ฝ์–ด๋ณด๋‹ค... ์ฝ์œผ๋‹ˆ ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

โ— ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์˜ ๊ฐœ์ˆ˜(N)๊ณผ ํ…Œ์ดํ”„์˜ ๊ธธ์ด(L)์ด ์ฃผ์–ด์ง€๋Š”๋ฐ, ๋ฌผ์ด ์ƒˆ๋Š”๊ณณ์„ ๋ง‰๊ณ , ํ…Œ์ดํ”„๋ฅผ ์ตœ์†Œํ•œ ์‚ฌ์šฉํ•˜๋ผ.

โ—๋ฌผ์ด ์ƒˆ๋Š”๊ณณ์€ ๊ทธ ์œ„์น˜์˜ ์ขŒ์šฐ 0.5๋งŒํผ์˜ ๊ฐ„๊ฒฉ์„ ์ค˜์•ผ ๋ฌผ์ด ๋‹ค์‹œ๋Š” ์•ˆ์ƒŒ๋‹ค๊ณ  ํ•œ๋‹ค.

๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ์˜ˆ์ œ ์ž…๋ ฅ

4 2 

1 2 100 101

์„ ํ† ๋Œ€๋กœ ๊ทธ๋ ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋ฐœ๊ทธ๋ฆผ ์ฃ„์†ก

1์˜ ์ขŒ์šฐ 0.5๋งŒํผ(0.5 , 1.5) ์™€ 2์˜ ์ขŒ์šฐ 0.5๋งŒํผ(1.5 , 2.5)๊ฐ„๊ฒฉ์„ ์ฃผ๊ณ  ํ…Œ์ดํ”„๋ฅผ ๋ถ™์—ฌ์•ผํ•˜๋Š”๋ฐ, 1๊ณผ 2๋Š” ์‚ฌ์ด์— ์ค‘๋ณต์ด๋˜๊ณ , ํ…Œ์ดํ”„์˜ ๊ธธ์ด๋Š” 2์ด๋ฏ€๋กœ ๋ฌผ์ด ์ƒˆ๋Š”๊ณณ์€ 1, 2 ๋‘๊ณค๋ฐ์ง€๋งŒ ํ…Œ์ดํ”„ ํ•œ๊ฐœ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

100๊ณผ 101๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

 

๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋Œ€๋กœ ๋‘ ๋ฐฐ์—ด์˜ ์š”์†Ÿ๊ฐ’์˜ ์ฐจ์ด์™€ ํ…Œ์ดํ”„-1 ๋งŒํผ์˜ ๊ธธ์ด๊ฐ€ ๊ฐ™์„๊ฒฝ์šฐ๋Š” ํ…Œ์ดํ”„ 1๊ฐœ๋กœ ๋ง‰๊ณ , ๋‹ค์Œ ์ธ๋ฑ์Šค๋กœ ๋„˜์–ด๊ฐ€๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ๋ฐ˜๋ก€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

๋ฌผ์ด ์ƒˆ๋Š”๊ณณ์˜ ๊ฐœ์ˆ˜๋Š” 5์ด๊ณ , ๊ธธ์ด๊ฐ€ 2์ด๊ณ , ๋ฌผ์ด ์ƒˆ๋Š”๊ณณ์ด 4, 5, 6, 7, 8 ์ผ๋•Œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์ด 4์ผ๋•Œ, ํ…Œ์ดํ”„๋ฅผ ํ•˜๋‚˜ ๋ง‰์œผ๋ฉด 3.5 ~ 5.5๊นŒ์ง€ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ ํ›„ 6์ด ์•„๋‹Œ 7์—์„œ ๋ง‰์œผ๋ฉด, 6.5 ~ 8.5๊นŒ์ง€ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค. 

์ฆ‰, ํ…Œ์ดํ”„ 2๊ฐœ๋กœ ๋‹ค ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์œ„ ์ฝ”๋“œ๋ผ๋ฉด ํ…Œ์ดํ”„๊ฐ€ 3๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

๊ทธ๋ž˜์„œ ์ ‘๊ทผ์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด๋ดค๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
		int N = Integer.parseInt(st.nextToken());	// ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์˜ ๊ฐœ์ˆ˜
		int L = Integer.parseInt(st.nextToken());	// ํ…Œ์ดํ”„ ๊ธธ์ด
		int min = 0;	// ํ•„์š”ํ•œ ํ…Œ์ดํ”„์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜
		int[] arr = new int[N];
		st = new StringTokenizer(bf.readLine());
		for(int i=0; i<arr.length; i++) 
			arr[i] = Integer.parseInt(st.nextToken()); 

		//ํ˜„์žฌ ๋ฌผ์ด ์ƒŒ๊ณณ์— ํ…Œ์ดํ”„๋ฅผ ๋ถ™์˜€์„๋•Œ, ํ…Œ์ดํ”„๊ฐ€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ฒ”์œ„
		int tapeRange = (int)(arr[0] - 0.5 + L);
		min ++;

        Arrays.sort(arr);

		for(int i=1; i<arr.length; i++) {
			if (tapeRange < (int)(arr[i] + 0.5)){
				tapeRange = (int)(arr[i] - 0.5 + L);
				min ++;
			}
		}

		System.out.println(min);
		bf.close();
	}

}

ํ’€์ด

๊ธฐ์ง€๊ตญ์„ค์น˜๋ฌธ์ œ ๋ณด๊ธฐ

์ €๋ฒˆ์— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ํ‘ผ ๊ธฐ์ง€๊ตญ ์„ค์น˜ํ•˜๋Š” ๋ฌธ์ œ์™€ ๋กœ์ง์ด ๊ฑฐ์˜ ๋™์ผ(?) ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๋””ํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค.

๊ฐ€์žฅ ์•ž ์ชฝ๋ถ€ํ„ฐ ๋จผ์ € ํ…Œ์ดํ”„๋ฅผ ํ•˜๋‚˜ ๋ง‰๊ณ , ๋งŒ์•ฝ ๋‹ค์Œ ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์ด, ์ด์ „์— ํ…Œ์ดํ”„๋ฅผ ๋ง‰์€ ๋ฒ”์œ„ ์ด๋‚ด๋ผ๋ฉด

ํ…Œ์ดํ”„๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.

๋งŒ์•ฝ ๋‹ค์Œ ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์ด ์ด์ „ ํ…Œ์ดํ”„๋ฅผ ๋ง‰์€ ๊ณณ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด ๋‚  ๊ฒฝ์šฐ => if (tapeRange < (int)(arr[i] + 0.5))

 

 -> ํ…Œ์ดํ”„์˜ ๋ฒ”์œ„๋ฅผ ๋‹ค์‹œ ์ง€์ •ํ•˜๊ณ , ํ…Œ์ดํ”„๋ฅผ +1 ํ•ด์ค€๋‹ค.

๋ฐœ๊ทธ๋ฆผ ์ฃ„์†ก

์œ„์— ์ œ์‹œํ•œ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋งŒ์•ฝ 1๋ฒˆ ์œ„์น˜์— ํ…Œ์ดํ”„๋ฅผ ์„ค์น˜ํ•  ๊ฒฝ์šฐ ? 

0.5 ~ 2.5๊นŒ์ง€ ๋ฒ”์œ„์ด๋ฏ€๋กœ, arr[i] - 0.5 + L ์ด๋ผ๋Š” ๋ฒ”์œ„๊ฐ€ ๋‚˜์˜จ๋‹ค.

 

* ๊ฐ€์žฅ ์ฒซ ๋ฐฐ์—ด์˜ ์š”์†Œ์—๋Š” ๋ฐ˜๋“œ์‹œ ํ…Œ์ดํ”„๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ดˆ๊ธฐ ํ…Œ์ดํ”„์˜ ๋ฒ”์œ„๋Š” ๋ฐฐ์—ด ์ธ๋ฑ์Šค์˜ 0๋ฒˆ์งธ์— ํ…Œ์ดํ”„๋ฅผ ์„ค์น˜ํ•  ๊ฒฝ์šฐ๋ฅผ ๋ฒ”์œ„๋กœ ์ง€์ •ํ•œ๋‹ค.

* ์ž…๋ ฅ์—์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ž…๋ ฅ๋ฐ›๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ, ๋ฐฐ์—ด์„ ์ž…๋ ฅํ•œ ํ›„ ์ •๋ ฌ์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

๋‹ค๋ฅธ ํ’€์ด

import java.io.*;
import java.util.*;
public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] t = br.readLine().split(" ");
		int  N = Integer.parseInt(t[0]);
		int  L = Integer.parseInt(t[1]);
		int pos[] = new int[1001];
		int tape=0;
		String[] input = br.readLine().split(" ");
		for(int i=0; i<N; i++) {
			pos[Integer.parseInt(input[i])] = 1;
		}


		for(int i=1;i<=1000;i++) {
			if(pos[i]!= 0) {
				i+=L-1;
				tape++;
			}
		}

		System.out.println(tape);
	}

}

๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•œ ํ’€์ด ...

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€