λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/BOJ

[BOJ] νšŒμ˜μ‹€λ°°μ •(1931)

[λ°±μ€€(BOJ)] νšŒμ˜μ‹€λ°°μ •(1931) C++

문제 : BOJ_1931번 νšŒμ˜μ‹€λ°°μ •

문제 μ„€λͺ…

그리디 μ•Œκ³ λ¦¬μ¦˜

유λͺ…ν•œ 그리디 λ¬Έμ œμž…λ‹ˆλ‹€.

νšŒμ˜μ‹€μ΄ ν•˜λ‚˜ 있고 N 개의 νšŒμ˜κ°€ μžˆλŠ”λ°,

νšŒμ˜λ§ˆλ‹€ μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ μ •ν•΄μ Έμžˆκ³ 

회의 μ‹œκ°„μ€ κ²ΉμΉ  순 μ—†μ§€λ§Œ 회의의 끝 μ‹œκ°„κ³Ό λ‹€μŒ 회의의 μ‹œμž‘ μ‹œκ°„μ΄ κ²ΉμΉ  순 μžˆμŠ΅λ‹ˆλ‹€.

또 ν•œ, μ‹œμž‘ μ‹œκ°„κ³Ό 끝 μ‹œκ°„μ΄ λ™μΌν•œ κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€.

μ΄λ•Œ κ°€λŠ₯ν•œ 회의의 μ΅œλŒ€ 개수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.


Solution

λλ‚˜λŠ” μ‹œκ°„μ΄ λΉ λ₯Έ 회의λ₯Ό μ„ νƒν•˜λ©΄, 뒀에 선택할 수 μžˆλŠ” 회의의 μˆ˜κ°€ λŠ˜μ–΄λ‚˜λ―€λ‘œ,

λλ‚˜λŠ” μ‹œκ°„λŒ€λ‘œ μ •λ ¬ν•˜μ—¬ κ·Έλ¦¬λ””ν•˜κ²Œ 회의λ₯Ό μ„ νƒν•˜λŠ” 것이 문제의 ν•΅μ‹¬μž…λ‹ˆλ‹€.

끝 μ‹œκ°„ 순으둜 정렬을 ν•˜κ³ , 이전 회의의 끝 μ‹œκ°„λ³΄λ‹€ μ‹œμž‘ μ‹œκ°„μ΄ λŠ¦λŠ”λ‹€λ©΄ μ΅œλŒ€ κ°œμˆ˜μ— μΆ”κ°€ν•΄ μ€λ‹ˆλ‹€.


λ‹€λ§Œ, μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ λ™μΌν•œ νšŒμ˜λŠ” 이전 νšŒμ˜κ°€ μ–΄λ–»λ“  간에 영ν–₯이 μ—†κΈ° λ•Œλ¬Έμ—, 무쑰건 μΆ”κ°€ν•΄ μ€λ‹ˆλ‹€.


Description

  1. μ‹œκ°„ 순으둜 정렬을 ν•˜κΈ° μœ„ν•΄ μš°μ„ μˆœμœ„νλ₯Ό μΌμŠ΅λ‹ˆλ‹€.
  2. μžλ£Œν˜•μ΄ pair 일 λ•Œ, μš°μ„ μˆœμœ„νλŠ” μ•žμ˜ μˆ«μžκ°€ κΈ°μ€€μ΄λ―€λ‘œ {끝 μ‹œκ°„, μ‹œμž‘ μ‹œκ°„} 으둜 push ν–ˆμŠ΅λ‹ˆλ‹€.
  3. 쀑간에 μ‹œμž‘ μ‹œκ°„κ³Ό 끝 μ‹œκ°„μ΄ κ°™μœΌλ©΄ 개수λ₯Ό +1 ν•΄μ£Όκ³  λ‹€μŒ 큐λ₯Ό pop ν–ˆμŠ΅λ‹ˆλ‹€.

#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int N, result, beforeStartTime, beforeEndTime;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq;
// μ˜€λ¦„μ°¨μˆœμΈ μš°μ„ μˆœμœ„νκ°€ ν•„μš”ν•˜λ―€λ‘œ greater<> μΆ”κ°€
int main(void) {
    cin >> N;
    for (int i = 0; i < N; i++) {
        int startTime, endTime;
        cin >> startTime >> endTime;
        pq.push({ endTime,startTime });
        // pair의 첫 번째 μΈμžκ°€ κΈ°μ€€ -> 끝 μ‹œκ°„, μ‹œμž‘ μ‹œκ°„ 순으둜 push
    }
    while (!pq.empty()) {
        int nowEndTime = pq.top().first;
        int nowStartTime = pq.top().second;
        pq.pop();
        if (beforeEndTime > nowStartTime) continue;
        // μ•ž 회의의 끝 μ‹œκ°„μ΄ μ§€κΈˆ 회의의 μ‹œμž‘ μ‹œκ°„λ³΄λ‹€ 늦으면 λ„˜μ–΄κ°„λ‹€.
        if (nowEndTime == nowStartTime) {
            // μ‹œμž‘ μ‹œκ°„κ³Ό 끝 μ‹œκ°„μ΄ κ°™μœΌλ©΄ 무쑰건 μΆ”κ°€ν•΄μ€€λ‹€.
            result++;
            beforeStartTime = nowStartTime;
            beforeEndTime = nowEndTime;
            continue;
        }
        result++;
        beforeStartTime = nowStartTime;
        beforeEndTime = nowEndTime;
    }
    cout << result << '\n';
}

'Algorithm > BOJ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] νžˆμŠ€ν† κ·Έλž¨(1725)  (0) 2022.03.07
[BOJ] κ³±μ…ˆ(1629)  (0) 2022.03.06
[BOJ] 숫자 야ꡬ(2503)  (0) 2022.03.06
[BOJ] 미세먼지 μ•ˆλ…•!(17144)  (0) 2022.03.06
[BOJ] μ—°μ‚°μž λΌμ›Œλ„£κΈ°(14888)  (0) 2022.03.06