문제

https://www.acmicpc.net/problem/19583

걸린 시간

02 : 20 : 24

풀이

C++

#include <bits/stdc++.h>
#define INF 987654321
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    string s;
    getline(cin, s);
    int seq[3]; // 순서대로 s, e, q
    int hh, mm;
    char buf[20];
    strcpy(buf, s.c_str());
    char* p = strtok(buf, ":");
    for(int i = 0; i < 3; i++){
        hh = atoi(p);
        p = strtok(NULL, " ");
        mm = atoi(p);
        p = strtok(NULL, ":");
        seq[i] = hh*60+mm;
    }
    int ans = 0, time;
    set<string> book; // 출석부
    string t, n; // time, name
    while(getline(cin, t, ' ') && getline(cin, n)){
        strcpy(buf, t.c_str());
        p = strtok(buf, ":");
        hh = atoi(p);
        p = strtok(NULL, " ");
        mm = atoi(p);
        time = hh*60+mm;
        if(time <= seq[0])
            book.insert(n);
        else if(seq[1] <= time && time <= seq[2]){
            if(book.find(n) != book.end()){
                book.erase(n);
                ans++;
            }
        }
    }
    cout << ans << "\n";
    return 0;
}

입력받는 방법과 입력된 문자열을 처리하는 방법을 찾는 데 대부분의 시간이 쓰였고 나머지 시간 동안은 코딩에서 실수한 부분을 수정했다.

코딩 실수는 또 문제를 잘못 읽어서 생긴 문제였다. 핑계를 대자면 모니터 화면에 브라우저와 텍스트 에디터를 반반씩 분할해 두고 사용하는데 문제의 설명 중 "시작한 시간 이전에"라는 문장이 절묘하게 줄바꿈 되어 "시작(\n)한 시간 이전에"처럼 보였고 개강 총회가 시작되기 한 시간 전까지의 채팅 기록만을 입장으로 처리했던 것이었다...

댓글