낭만 IT

반응형

출처

2011 지역본선 초등2

문제 주소

백준 2457번 공주님의 정원

 

2457번: 공주님의 정원

첫째 줄에는 꽃들의 총 개수 N (1<=N<=100,000)이 주어진다. 다음 N개의 줄에는 각 꽃이 피는 날짜와 지는 날짜가 주어진다. 하나의 날짜는 월과 일을 나타내는 두 숫자로 표현된다. 예를 들어서, 3 8 7

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include<iostream>
#include<algorithm>
using namespace std;
 
struct A{
    int end,start; 
};
 
A in[100000];
 
 
// 먼저 심을 수 있는 순서대로 정렬한다. 
int cmp(A a, A b){
    return a.start<b.start;
}
 
 
 
int main(){
    int n;
    
    cin>>n;
    
    for(int i=0;i<n;i++){ // 날짜간의 대소관계만 비교하면 되기 때문에 다음과 같이 처리 할 수 있다. 
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        
        in[i].start=a*100+b;
        in[i].end=c*100+d;    
    }
    
    sort(in,in+n,cmp);
    
    int now=301,ans=0,index,max=0;
    for(int i=0;i<=n-1;i++){
 
        // 1번째 종료조건 : 목표 달성 
        if(now>1130)    
            break;
 
        // 오늘(now)을 포함하는 꽃들 중 가장 오래 심을 수 있는 꽃을 찾는다. 
        if(max<in[i].end&&in[i].start<=now){ 
            index=i;
            max=in[i].end;
        }
 
        // 오늘을 포함 하지 않는 꽃이 등장하면 오늘의 날짜를 바꿔주고 이 꽃을 다시 봐야 하기 때문에 i에 1을 빼준다.
        if(in[i].start>now&&max!=0){    
            now=in[index].end;
            ans++;
            i--;
            max=0;
        }
 
        // 3번째 종료조건 : 모든 꽃들을 확인한 경우 
        else if(max!=0&&i==n-1){    
            now=in[index].end;
            ans++;
        }
 
        // 2번째 종료조건 : 꽃 밭이 비어있는 날이 생길 때     
        else if(max==0){  
            ans=0;
            break;
        }
    }
    
    if(now<=1130)  // 모든 꽃을 다 확인하였지만 목표를 달성하지 못한 경우가 있는지 확인한다. 
        ans=0;
    
    cout<<ans;
}

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 코드 업, algorithm, 알고리즘, 자료구조, 문제, 문제 풀이, 정올 해설

반응형

'Problem Solve > Greedy' 카테고리의 다른 글

[백준] 8980번 택배 (C)  (2) 2020.03.07
[코드업] 4040 : 펜션 (C)  (0) 2020.03.07
[코드업] 3321 : 최고의 피자 (C)  (0) 2020.03.07
[코드업] 3301 : 거스름돈 (C)  (0) 2020.03.06
[코드업] 3120 : 리모컨 (C)  (0) 2020.03.06

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band