(문제 지문 중요)디스크 컨트롤러

욥·2026년 6월 3일

260725. 지문 중요

  • 이 내용이 중요하다

  • [0,3] , [3,1000] , [4,1] 이 있다고 한다면
    -> [0,3] 동작 이후에 [4,1]은 push 불가능하다. 겹치지 않는다!

  • 만약 그리디 문제라고 한다면
    -> 최소시간을 위해서 [0,3] -> [4,1] -> [3,1000] 을 해야만한다.

그래서 코드에서 이게 나오는 이유다.


문제 해결 전략

  • 1) 초기화는 가장 startTime 앞선거를 놓자.
  • 2) 그 다음부터는 1번과 2번 작업을 넣을건데, 2번작업의 비용이 더 좋다.
    아무리 1번이 앞선다고 하더라도, 걸리는 시간이 2번작업이 5ms이기 때문에 2번을 먼저 넣어야 한다.

  • => 즉 pq를 통해서 top을 관리할건데,

중요! : 사용자 정의 함수.

  • 3) 비교방식은 사용자 정의 함수를 만들어야 한다.
    -> pq의 비교함수는 struct 구조로 해서 operator 함수를 만들어야 함.

문제해결전략

  • 다시 돌아와서

  • 4) 0번 입장에서 봤을때, 0~3 간격의 모든 startTime을 전부 넣어야 한다. 그래야만 , 다음에 작업한 작업을 선정할 수 있기 때문이다.
    (문제에서도 힌트가 주어졌고, 반례를 만들면서 생각한 부분이다.)

-> 3을 벗어난거까지 넣어버리면, 최적화된 과정이 아니다. 다음에 생각해도 된다.

  • 그래서 이러한 코드를 작성함.

중요 ! for 밖에서 선언.

  • 비교하려는 인덱스는 계속 갱신해야 하므로, for문 외부에 선언을 했다.
    그리고 계속 갱신하는 것이므로 for문을 이렇게 했는데,
    -> 자주 사용을 하지 않아서 그렇지 어려운것은 아니다. 그냥 시작점만 없애면 됨.


문제해결 전략

  • 다시 돌아와서
  • 5) 마지막의 이 부분은 1번 작업이 8부터 시작하는 //
    이러한 경우를 처리하기 위함이다.

profile
🔥🔥🔥

0개의 댓글