https://www.acmicpc.net/problem/1449
ํ๋ฆฐ ์ฝ๋
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);
}
}
๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ํตํด ํด๊ฒฐํ ํ์ด ...
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2437๋ฒ: ์ ์ธ(๊ทธ๋ฆฌ๋) (0) | 2020.02.28 |
---|---|
[๋ฐฑ์ค] 1236๋ฒ: ์ฑ ์งํค๊ธฐ(๊ตฌํ) (1) | 2020.02.27 |
[๋ฐฑ์ค] 2193๋ฒ: ์ด์น์(DP) (0) | 2020.02.27 |
[๋ฐฑ์ค] 2966๋ฒ: ์ฐ๊ธฐ(์์ ํ์, brute force) (0) | 2020.02.26 |
[๋ฐฑ์ค] 1065๋ฒ: ํ์(์์ ํ์, brute force) (0) | 2020.02.26 |
๋๊ธ