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

[λ°±μ€€/C++] 19583번: μ‹Έμ΄λ²„κ°œκ°•μ΄νšŒ

by nitronium102 2022. 7. 17.

λ³΄μ˜μ΄λŠ” μ•Œκ³ λ¦¬μ¦˜ 동아리 HI-ARCλ₯Ό μš΄μ˜ν•˜κ³  μžˆλ‹€.

λ³΄μ˜μ΄μ™€ μš΄μ˜μ§„ 일동은 20년도에 μž…ν•™ν•˜λŠ” μ‹ μž…μƒλ“€μ„ λ§žμ΄ν•˜κΈ° μœ„ν•΄ μ—΄μ‹¬νžˆ μ€€λΉ„λ₯Ό ν•΄μ™”μœΌλ‚˜, μ „μ—Όλ³‘μ˜ μœ ν–‰μ΄ μ•…ν™”λœ λ‚˜λ¨Έμ§€ μ •λΆ€μ—μ„œλŠ” “μ‚¬νšŒμ  거리두기”λ₯Ό μ„ μ–Έν–ˆκ³  그에 따라 ν•™κ΅μ—μ„œλŠ” ꡐ내 λͺ¨λ“  동아리에 μ˜€ν”„λΌμΈ λͺ¨μž„을 μžμ œν•˜λΌλŠ” 곡지λ₯Ό ν•˜κΈ°μ— 이λ₯΄λ €λ‹€. μ˜€ν”„λΌμΈμ—μ„œ λͺ¨μž„을 μžμ œν•˜λΌλŠ” κΆŒκ³ κ°€ λ‚˜μ˜¨ μ–΄λ €μš΄ 상황에도 λΆˆκ΅¬ν•˜κ³ , λ³΄μ˜μ΄λŠ” 기지λ₯Ό λ°œνœ˜ν•˜μ—¬ κ°œκ°•μ΄νšŒλ₯Ό 미튜브 슀트리밍으둜 λŒ€μ²΄ν•˜λŠ” 결정을 ν•˜κ²Œ λœλ‹€.

ν•˜μ§€λ§Œ, 미튜브 슀트리밍으둜 κ°œκ°•μ΄νšŒλ₯Ό ν•˜κ²Œ 될 경우, μ•„λž˜μ™€ 같은 λ¬Έμ œκ°€ μžˆμ—ˆλ‹€.

  1. λˆ„κ°€ κ°œκ°•μ΄νšŒμ— μ™”λŠ”μ§€ μ•Œ 수 μ—†λ‹€.
  2. λˆ„κ°€ κ°œκ°•μ΄νšŒ μžλ¦¬μ— λκΉŒμ§€ λ‚¨μ•„μžˆμ—ˆλŠ”μ§€ μ•Œ 수 μ—†λ‹€.
  3. μ–΄λ–€ μ‚¬λžŒμ΄ κ°œκ°•μ΄νšŒ μŠ€νŠΈλ¦¬λ°μ„ λ‹¨μˆœνžˆ ν‹€μ–΄λ†“κΈ°λ§Œ ν–ˆλŠ”μ§€ μ•Œ 수 μ—†λ‹€.

이런 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ, λ‹€μŒκ³Ό 같이 μΆœμ„λΆ€λ₯Ό κ΄€λ¦¬ν•˜κΈ°λ‘œ κ²°μ‹¬ν–ˆλ‹€.

  1. κ°œκ°•μ΄νšŒλ₯Ό μ‹œμž‘ν•˜κΈ° 전에, ν•™νšŒμ›μ˜ μž…μž₯ 확인 μ—¬λΆ€λ₯Ό ν™•μΈν•œλ‹€. ν•™νšŒμ›μ˜ μž…μž₯ μ—¬λΆ€λŠ” κ°œκ°•μ΄νšŒκ°€ μ‹œμž‘ν•œ μ‹œκ°„ 이전에 λŒ€ν™”λ₯Ό ν•œ 적이 μžˆλŠ” ν•™νšŒμ›μ˜ λ‹‰λ„€μž„μ„ 보고 μ²΄ν¬ν•œλ‹€. κ°œκ°•μ΄νšŒλ₯Ό μ‹œμž‘ν•˜μžλ§ˆμž μ±„νŒ… 기둝을 남긴 ν•™νšŒμ›λ„ 제 μ‹œκ°„μ— μž…μž₯이 ν™•μΈλœ κ²ƒμœΌλ‘œ κ°„μ£Όν•œλ‹€.
  2. κ°œκ°•μ΄νšŒλ₯Ό 끝내고 λ‚˜μ„œ, μŠ€νŠΈλ¦¬λ°μ„ 끝낼 λ•ŒκΉŒμ§€ ν•™νšŒμ›μ˜ 퇴μž₯ 확인 μ—¬λΆ€λ₯Ό ν™•μΈν•œλ‹€. ν•™νšŒμ›μ˜ 퇴μž₯ μ—¬λΆ€λŠ” κ°œκ°•μ΄νšŒκ°€ λλ‚˜κ³  슀트리밍이 끝날 λ•ŒκΉŒμ§€ λŒ€ν™”λ₯Ό ν•œ 적이 μžˆλŠ” ν•™νšŒμ›μ˜ λ‹‰λ„€μž„μ„ 보고 μ²΄ν¬ν•œλ‹€. κ°œκ°•μ΄νšŒκ°€ λλ‚˜μžλ§ˆμž μ±„νŒ… 기둝을 λ‚¨κ²Όκ±°λ‚˜, κ°œκ°•μ΄νšŒ 슀트리밍이 λλ‚˜μžλ§ˆμž μ±„νŒ… 기둝을 남긴 ν•™νšŒμ›λ„ 제 μ‹œκ°„μ— 퇴μž₯이 ν™•μΈλœ κ²ƒμœΌλ‘œ κ°„μ£Όν•œλ‹€.  

단, 00:00λΆ€ν„°λŠ” κ°œκ°•μ΄νšŒλ₯Ό μ‹œμž‘ν•˜κΈ° μ „μ˜ λŒ€κΈ° μ‹œκ°„μ΄λ©°, κ°œκ°•μ΄νšŒ 슀트리밍 λλ‚œ μ‹œκ°„ μ΄ν›„λ‘œ 남겨져 μžˆλŠ” μ±„νŒ… 기둝은 λ‹€λ₯Έ 슀트리밍 μ˜μƒμ˜ μ±„νŒ… 기둝으둜 κ°„μ£Όν•œλ‹€.

이 λ•Œ, μž…μž₯λΆ€ν„° 퇴μž₯κΉŒμ§€ λͺ¨λ‘ ν™•μΈλœ ν•™νšŒμ›μ€ μ „λΆ€ λͺ‡ λͺ…인가?

μž…λ ₯

첫번째 μ€„μ—λŠ” κ°œκ°•μ΄νšŒλ₯Ό μ‹œμž‘ν•œ μ‹œκ°„ S, κ°œκ°•μ΄νšŒλ₯Ό 끝낸 μ‹œκ°„ E, κ°œκ°•μ΄νšŒ μŠ€νŠΈλ¦¬λ°μ„ 끝낸 μ‹œκ°„ Qκ°€ 주어진닀. (00:00 ≤ S < E < Q ≤ 23:59)
각 μ‹œκ°„μ€ HH:MM의 ν˜•μ‹μœΌλ‘œ 주어진닀.

λ‘λ²ˆμ§Έ μ€„λΆ€ν„°λŠ” HI-ARCμ—μ„œ λ°©μ†‘ν•˜λŠ” 슀트리밍 μ˜μƒμ˜ μ±„νŒ… 기둝듀이 μ‹œκ°„μˆœμœΌλ‘œ μ£Όμ–΄μ§€λŠ”λ°, (μ‹œκ°„) (ν•™νšŒμ› λ‹‰λ„€μž„)의 ν˜•νƒœλ‘œ 주어진닀. ν•™νšŒμ›μ˜ λ‹‰λ„€μž„μ€ μ•ŒνŒŒλ²³ λŒ€μ†Œλ¬Έμžμ™€ 숫자, 그리고 특수 기호(., _, -)둜만 κ΅¬μ„±λœ λ¬Έμžμ—΄μ΄λ©° μ΅œλŒ€ 20κΈ€μžμ΄λ‹€.

λͺ¨λ“  μ±„νŒ… 기둝은 κ°œκ°•μ΄νšŒκ°€ μΌμ–΄λ‚œ 날에 λ°œμƒν•œ μ±„νŒ… 기둝이닀. 즉 00:00~23:59의 μ‹œκ°„λ§Œ 주어진닀. μ±„νŒ… 기둝은 10만 쀄을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

좜λ ₯

μΆœμ„μ΄ ν™•μΈλœ ν•™νšŒμ›μ˜ 인원 수λ₯Ό 좜λ ₯ν•œλ‹€.

 

풀이

1) κ°œκ°• 총회 μ „ : map을 μ΄μš©ν•΄μ„œ μ±„νŒ…μ„ 남긴 μ‚¬λžŒμ„ μ €μž₯ν•œλ‹€.

2) κ°œκ°• 총회 ν›„ : 슀트리밍 μ’…λ£Œ μ‹œκ°„ μ „κΉŒμ§€ μ±„νŒ… 기둝을 보고 퇴μž₯ μ—¬λΆ€λ₯Ό ν™•μΈν•œλ‹€. 이 λ•Œ, λ™μΌν•œ μ‚¬λžŒμ΄ μ±„νŒ…μ„ μ—¬λŸ¬ 번 남겼을 수 μžˆμœΌλ―€λ‘œ map의 value값을 μ΄μš©ν•΄ 쀑볡 체크λ₯Ό ν•œλ‹€.

#include <iostream>
#include <map>

using namespace std;

/*
 * κ°œκ°•μ΄νšŒ μ „ : κ°œκ°• 총회 μ‹œμž‘ μ‹œκ°„ μ΄ν•˜
 * κ°œκ°•μ΄νšŒ ν›„ ~ 슀트리밍 끝 : κ°œκ°•μ΄νšŒ μ’…λ£Œ μ‹œκ°„ 이상 ~ 슀트리밍 μ’…λ£Œ μ‹œκ°„ μ΄ν•˜
 */
int main() {
    string s, e, q, time, nickname;

    map<string, bool> m;
    int cnt = 0;

    cin >> s >> e >> q;
    while (cin >> time >> nickname) { // μž…λ ₯이 μžˆλŠ” λ™μ•ˆ 반볡
        if (time <= s)
            m[nickname] = true;
        else if (time >= e && time <= q) {
            if (m[nickname]) {
                cnt++;
                m[nickname] = false; // 쀑볡 count 방지
            }
        }
    }
    cout << cnt << "\n";
}

λŒ“κΈ€