λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm🐰/λ°±μ€€

[λ°±μ€€] 19598 μ΅œμ†Œ νšŒμ˜μ‹€ 개수

by Jouureee 2021. 2. 17.

문제 :

www.acmicpc.net/problem/19598

 

19598번: μ΅œμ†Œ νšŒμ˜μ‹€ 개수

μ„œμ€€μ΄λŠ” μ•„λΉ λ‘œλΆ€ν„° N개의 회의λ₯Ό λͺ¨λ‘ 진행할 수 μžˆλŠ” μ΅œμ†Œ νšŒμ˜μ‹€ 개수λ₯Ό κ΅¬ν•˜λΌλŠ” λ―Έμ…˜μ„ λ°›μ•˜λ‹€. 각 νšŒμ˜λŠ” μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ 주어지고 ν•œ νšŒμ˜μ‹€μ—μ„œ λ™μ‹œμ— 두 개 μ΄μƒμ˜ 회의

www.acmicpc.net

뢄석 : 

이 λ¬Έμ œλŠ” 주어진 인풋에 λŒ€ν•΄ ν•„μš”λ‘œ λ˜λŠ” μ΅œμ†Œ νšŒμ˜μ‹€ 개수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œλ‹€. greedyλ₯Ό μ΄μš©ν•΄ ν’€μ—ˆκ³ 

νšŒμ˜μ‹€μ΄ 3개, νšŒμ˜μ‹€ 이용 μ‹œκ°„μ€

0 40

15 30

5 10 으둜 μ£Όμ–΄μ§ˆ λ•Œ 

 

1. 회의 μ‹œμž‘ μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ 정렬을 ν•œλ‹€. 

0 40

5 10

15 30 

 

ν•¨μˆ˜ μ•ˆμ—μ„œ μ²˜μŒμ— 0, 40을 vv vector에 담은 λ’€ v ν•¨μˆ˜ λ‹€ 돌 λ•ŒκΉŒμ§€ vv 크기만큼 if문을 λŒκ²Œλœλ‹€.

else λ¬Έ -> λ‹€μŒ 회의 μ‹œμž‘ μ‹œκ°„(iter.first)이 vv vector에 λ‹΄κΈ΄ μ›μ†Œμ˜ 회의 λλ‚˜λŠ” μ‹œκ°„(vv[i].second)보닀 ν΄λ•Œλ§Œ λ‹€μŒ 회의의 λλ‚˜λŠ” μ‹œκ°„μ„ μ—…λ°μ΄νŠΈ ν•΄μ€€λ‹€. 그게 μ•„λ‹ˆλΌλ©΄ continue둜 λ„˜κΈ°κ²Œ λœλ‹€.

vv 크기만큼 λ‹€ 돌게 되면 λ‹€μŒ if 문이 μ‹€ν–‰λœλ‹€. 

이 뢀뢄은 μ—°μž₯λ˜μ§€ μ•Šμ€ 회의λ₯Ό vv에 λˆ„μ μ‹œμΌœ μƒˆλ‘œμš΄ νšŒμ˜μ‹€ ν•„μš”ν•œ 경우 λ„£λŠ” 곳이닀.

vv vectorμ—λŠ” μ΅œμ’…μ μœΌλ‘œ λˆ„μ λœ 회의만이 μ €μž₯λ˜μ–΄ μžˆλ‹€. ex> 0 40 / 5 30 

μ•žμ— 1931λ²ˆμ„ λ¨Όμ € ν’€κ³  이 문제λ₯Ό ν’€κΈΈ μΆ”μ²œν•œλ‹€ !! 

 

 

C++ μ½”λ“œ : 

//
//  19598_room_min.cpp
//  SOMAπŸ‘©πŸ»‍πŸ’»
//
//  Created by JoSoJeong on 2021/02/10.
//

#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;


int assign_room_min(int n, vector <pair<int, int>> v){
    int cnt;
    
    vector<pair<int, int> > vv;
    sort(v.begin(), v.end()); // first μ›μ†Œ κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœμ„ μ •λ ¬
    
    vector<pair<int, int> >::iterator  iter;
    
    for(iter = v.begin(); iter != v.end(); ++iter){
          int i = 0;
          for(i = 0; i < vv.size(); i++) // 검사할 갯수 0λ²ˆμ§ΈλΆ€ν„° 검사 μ‹œμž‘
          {
              if((*iter).first >= vv[i].first && (*iter).first < vv[i].second){
                  continue;
              }
              else {
                  vv[i].second = (*iter).second;
                  break;
              }

          }
          
          if(i ==  vv.size()){
              vv.push_back(*iter);// 처음 λ„£λŠ” κ³³
          }
              
      }
    
    cnt = (int)vv.size();
    return cnt;
}

int main(){
    int n;
    cin >> n;
    vector <pair<int, int>> v;
    int start, finish;
    for(int i = 0; i < n; i++){
        cin >> start >> finish;
        v.push_back(make_pair(start, finish));
    }
    int count = assign_room_min(n, v);
    cout << count << endl;
    return 0;
}

λŒ“κΈ€