카테고리 없음

[백준/JAVA] 1911번: 흙길 보수하기

imname1am 2023. 8. 23. 01:12
반응형

🔺 문제

 

1911번: 흙길 보수하기

어젯밤 겨울 캠프 장소에서 월드 본원까지 이어지는, 흙으로 된 비밀길 위에 폭우가 내려서 N(1 ≤ N ≤ 10,000)개의 물웅덩이가 생겼다. 월드학원은 물웅덩이를 덮을 수 있는 길이가 L(1 ≤ L ≤ 1,000

www.acmicpc.net

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.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(br.readLine(), " ");
            arr[i][0= Integer.parseInt(st.nextToken());
            arr[i][1= Integer.parseInt(st.nextToken());
        }
 
        // [1. 웅덩이 정렬]
        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]);
           }
        });
        
        // [2. 웅덩이 순회하며 널빤지 깜]
        int cnt = 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;
                    cnt++;
                }
            }
        }
        
        System.out.println(cnt);
    }
}
cs
✅ 해결 아이디어
✔ 정렬 & 그리디
1] 웅덩이 정렬 (Line 22-28)
  - 물 웅덩이 시작 위치 기준으로 오름차순 정렬
  - 시작 위치가 동일한 경우, 끝 위치 기준으로 오름차순 정렬
2] 웅덩이 순회하며 널지찌 깔기 (Line 30-43)
 - 만약 웅덩이 시작 위치 > range라면, 새로 널빤지를 덮어야 하므로 시작 위치를 range로 설정
 - 만약 웅덩이 끝     위치 > range라면, 널빤지를 깔고 range를 널빤지 길이만큼 증가시킴
 - while문이 돌 때마다 널빤지 개수인 answer + 1

 


🔺 다른 풀이들

- 다들 비슷하심

 


💬 느낀 점

후엥 그리디 쉽지 않구나.....ㅠ

복습을 245만번해야할듯..

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

[백준] 1911번: 흙길 보수하기(그리디)

https://www.acmicpc.net/problem/1911 1911번: 흙길 보수하기 어젯밤 겨울 캠프 장소에서 월드 본원까지 이어지는, 흙으로 된 비밀길 위에 폭우가 내려서 N (1 range) { range += L; nulpan ++; } } } System.out.println(nulpan

zzang9ha.tistory.com

 

[백준] Java 1911 흙길 보수하기

https://www.acmicpc.net/problem/1911정렬스위핑 알고리즘처음 길이부터 끝까지 한번만 스캔하면서 문제를 해결하는 것.일단 스위핑 알고리즘을 이용하려면 배열을 정렬시켜야 한다.1\. 웅덩이 시작점 오

velog.io

 

반응형