문제 분석

  • 2초 -Big-O 계산 약 2억
  • 최근에 나온 과제부터 -> <stack> 사용
  • 각 과제에는 점수와 시간 이 있음 <pair>사용

풀이 방식

  • 분 마다 시행되는 과정
    • 과제 추가 여부 확인
    • 가장 최근 나온 과제 1분 해결
    • 만약 과제 다했으면 삭제
stack<pair<int, int>> hw;//(과제 점수,과제 하는데 걸리는시간)을 pair로 가지는 stack
int n, a, t, score;
bool exist;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin >> n;
    while (n--) {//n번 반복
        cin >> exist;
        if (exist) {//추가 과제 여부
            cin >> a >> t;
            hw.push({a, t});//과제 추가
        }
        if (!hw.empty()) {//과제가 없을 때에 대한 예외 처리
            hw.top().second -= 1;//가장 최근 과제 1분 어치 해결
            if (hw.top().second == 0) {//과제 끝나면
                score += hw.top().first;//점수에 추가
                hw.pop();//과제 삭제
            }
        }
    }
    cout << score;
    return 0;
}

느낀점

  • 비교적 금방 풀었다. 다만 꼭 고쳐야 하는 점이 빈 stack에 접근하지 말라는 예외처리를 안했다는 점인데 이 부분은 꼭 고쳐야 겠다.
  • 문제를 풀면서 <pair>를 이용하는 경우가 많다, 최근들어 자주사용하는데 알고리즘 문제 풀때 유용한 것 같다.

시간 복잡도

  • stack의 top에 대한 접근, pop -> O(1)
  • n번 반복
    ➣ O(n)

'Algorithm > baekjoon' 카테고리의 다른 글

[BOJ 19638] 센티와 마법 뿅망치  (0) 2022.07.26
[BOJ 25192] 인사성 밝은 곰돌이  (0) 2022.07.26
[BOJ 12789] 도키도키 간식드리미  (0) 2022.07.25
[BOJ 5430] AC  (0) 2022.07.25
[BOJ 13335] 트럭  (0) 2022.07.25

+ Recent posts