https://www.acmicpc.net/problem/1911
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
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[][] arr = new int[N][2]; // ๋ฌผ ์
๋ฉ์ด ์์, ๋์์น
for(int i=0; i<N; i++) {
st = new StringTokenizer(bf.readLine());
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr, new Comparator<int []>() {
// ๋ฌผ์
๋ฉ์ด์ ์์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ -> ์์ ์์น๊ฐ ๋์ผํ๋ฉด ๋ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0] == o2[0])
return Integer.compare(o1[1], o2[1]);
return Integer.compare(o1[0], o2[0]);
}
});
int nulpan = 0; // ํ์ํ ๋๋นค์ง์ ๊ฐ์
int range = 0; // ๋๋นค์ง๋ฅผ ๋ฌผ์
๋ฎ์ด์ ๋ฎ์์๋, ๋ฎ์ ์ ์๋ ๋ฒ์
for(int i=0; i<N; i++) {
if(arr[i][0] > range)
range = arr[i][0];
if(arr[i][1] >= range) {
while(arr[i][1] > range) {
range += L;
nulpan ++;
}
}
}
System.out.println(nulpan);
bf.close();
}
}
ํ์ด
์ผ๋จ ๊ทธ๋ฆฌ๋ ๋ฌธ์ ์ฌ์ ํ๋ํ๋ ํ์์ค๋ฝ๊ฒ ์ ๊ทผํ ๊ฑฐ๊ธฐ ๋๋ฌธ์, ์ฃผ์ด์ง ๋ฌผ ์ ๋ฉ์ด์ ์์์์น, ๋์์น๋ฅผ ์ ๋ ฌ์ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค. ์ ๋ ฌ ์กฐ๊ฑด์ ๋ฌผ ์ ๋ฉ์ด์ ์์ ์์น๊ฐ ๊ฐ์ฅ ์์ ๊ฒ ๋ถํฐ, ๊ฐ์ผ๋ฉด ๋์์น๊ฐ ์์๊ฒ๋ถํฐ ์ ๋ ฌํ๋ค.
Comparator ์ธํฐํ์ด์ค ์ฐธ๊ณ
๊ทธ ํ, ํ๋ํ๋ ๋น๊ตํด๊ฐ๋ฉฐ ๋๋นค์ง๋ฅผ ์ค์นํ ๊ฒ์ธ์ง? ์ค์นํ๋ค๋ฉด ๋ช๊ฐ์ค์นํ๋์ง ํ๋จ์ ํ๋ฉด ๋๋๋ฐ ์ฌ๊ธฐ์ ๋๋ฌด ์๊ฐ์ด ๋ง์์ง๊ณ ํท๊ฐ๋ ธ๋ค.
๋ฐฐ์ด์๋ ๋ฌผ ์ ๋ฉ์ด์ ์์์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ด ๋์ด์์ผ๋ฏ๋ก, ์์์๋ถํฐ ๋น๊ตํด๊ฐ๋ฉฐ ํ์ํ ๋๋นค์ง์ ๊ฐ์๋ฅผ ๊ตฌํ๋ฉด ๋๋๋ฐ, range ๋ณ์๋ ๋๋นค์ง๋ก ๋ฌผ์ ๋ฉ์ด๋ฅผ ๋ฎ์์๋, ์ด๋๊น์ง ๋ฎ์ ์ ์๋์ง ๋ํ๋ด๋ ๋ฒ์์ด๋ค.
๋ง์ฝ ๋ฌผ ์ ๋ฉ์ด์ ์์ ์์น๊ฐ range ๋ฒ์๋ณด๋ค ํฌ๋ค๋ฉด, ์ด ๊ณณ์ ๋๋นค์ง๋ฅผ ๋ฎ์ด์ผ ํ๋ฏ๋ก ์ ๋ฉ์ด์ ์์ ์์น๋ฅผ range ๋ฒ์๋ก ์ค์ ํ๋ค.
๊ทธ ํ ์ ๋ฉ์ด์ ๋๋๋ ์์น๊น์ง ๋๋นค์ง๋ฅผ ๋ฎ์ด์ผ ํ๋๋ฐ,
์ ๋ฉ์ด์ ๋๋๋ ์์น(arr[i][1]) ๊ฐ ๋ฒ์(range)๋ณด๋ค ํด ๋ ๊น์ง ๋๋นค์ง๋ฅผ ๋ฎ๊ณ , ๋ฒ์๋ฅผ ๋๋นค์ง ๊ธธ์ด๋งํผ ๋๋ฆฐ๋ค
while(arr[i][1] > range) {
range += L;
nulpan ++;
}
์ ํ์ด๋ฅผ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
โ ํ์ฌ ๋ฌผ์ ๋ฉ์ด์ ์์ ์์น์ ์ด์ ์ ์ค์นํ ๋๋นค์ง์ ๋ฒ์๋ฅผ ๋น๊ตํ๋ค.
โ ๋ง์ฝ ํ์ฌ ๋ฌผ ์ ๋ฉ์ด์ ์์ ์์น๊ฐ ์ด์ ์ค์นํ ๋๋นค์ง์ ๋ฒ์๋ณด๋ค ํฌ๋ฉด ๋๋นค์ง๋ฅผ ๋ฎ์ด์ผํ๋ค.
โ ์๋ก ๋๋นค์ง๋ฅผ ๋ฎ์ด์ผ ํ๋ ๋ถ๋ถ์ด๋ฏ๋ก, ๋ฒ์๋ฅผ ๋ฌผ ์ ๋ฉ์ด์ ์์ ์์น๋ก ์ง์ ํ๋ค. range = arr[i][0]
โ ๋ฌผ ์ ๋ฉ์ด์ ๋๋๋ ์์น๊ฐ ๋๋นค์ง ๋ฒ์๋ณด๋ค ํฐ๊ฒฝ์ฐ - ๋ฌผ ์ ๋ฉ์ด์ ๋๋๋ ์์น๊น์ง ๋๋นค์ง๋ฅผ ๊ณ์ ๋ฎ๋๋ค.
๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋๋ฌด ๋จธ๋ฆฌ์ํ๋ค...
๋น์ทํ ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1057๋ฒ: ํ ๋๋จผํธ(๊ตฌํ, ์ํ) (0) | 2020.03.12 |
---|---|
[๋ฐฑ์ค] 2979๋ฒ: ํธ๋ญ ์ฃผ์ฐจ(๊ตฌํ, ์๋ฎฌ๋ ์ด์ ) (0) | 2020.03.12 |
[Codeforces] 1311A: Add Odd or Subtract Even (0) | 2020.03.12 |
[Codeforces] 1003A: Polycarp's Pockets (0) | 2020.03.11 |
[๋ฐฑ์ค] 11729๋ฒ: ํ๋ ธ์ด ํ ์ด๋ ์์(์ฌ๊ท, ๋ถํ ์ ๋ณต) (0) | 2020.03.11 |
๋๊ธ