알고리즘

[BOJ 17952] 과제는 끝나지 않아!

dldyou 2024. 4. 29. 22:27

1. 과제는 가장 최근에 나온 순서대로 한다. 또한 과제를 받으면 바로 시작한다.

2. 과제를 하던 도중 새로운 과제가 나온다면, 하던 과제를 중단하고 새로운 과제를 진행한다.

3. 새로운 과제가 끝났다면, 이전에 하던 과제를 이전에 하던 부분부터 이어서 한다.

 

위 조건에 따라 그대로 구현해주면 되는 시뮬레이션 문제이다. 최근에 나온 과제를 먼저 해야하므로 스택을 사용해서 구현해주자.

 

int N;
stack<pair<int, int>> s;
int main(void) {
    fastio;
    cin >> N;
    int score = 0;
    for (int i = 1; i <= N; i++) {
        int isExist, A, T;
        cin >> isExist;
        if (isExist) { // 해당 시간에 과제가 존재
            cin >> A >> T;
            s.push({ A, T }); // 스택에 과제 추가
        }
        if (!s.empty()) { // 해야하는 과제가 남아있는가?
            if (--s.top().ss == 0) { // 최근 과제의 남은 시간을 감소
                score += s.top().ff; // 과제를 다 했으면 점수 추가
                s.pop(); // 그리고, 과제를 제거
            }
        }
    }
    cout << score;
    return 0;
}

'알고리즘' 카테고리의 다른 글

[BOJ 2829] 아름다운 행렬  (0) 2024.04.29
[BOJ 22862] 가장 긴 짝수 연속한 부분 수열 (large)  (1) 2024.04.02
[BOJ 22858] 원상 복구 (small)  (0) 2024.04.02
[BOJ 11508] 2+1 세일  (0) 2024.04.01
[BOJ 9660] 돌 게임 6  (0) 2024.04.01