1781 컵라면_순회강연과 유사_250706

·2022년 7월 29일
0

백준 알고리즘

목록 보기
48/309

접근방법

: 문제를 읽어보고 의심부터 해야 한다.

  • 데드라인이므로, 앞의번호에서 채우더라도 마지막에 오는 day에서
    더 높은 값이 주어지면 어떻게 될까??? 라는 생각을 해야 함.
    => N의 시점에서 바라봐야 한다.

왜 틀렸나?

  • 반례를 생각해야하는 문제다.

첫번째 반례

  • 만약에 아래의 예시라고 한다면 답은 6이 나와야 하는데,
    나의 코드는 그렇지 않다.

ttime 을 증가시켜서 하면

  • 아래의 예제는 되지만 문제의 예제는 안된다.

두번째 생각한 반례

  • 만약 이러한 반례라고 한다면? 32가 나와야 한다.

해결책

  • -> 결론 : 컨테이너 사이즈를 통해서 다음에 들어올 컵라면의 데드라인과의 비교를 해야 한다.
    => 컨테이너는 pq로 정했다. 컨테이너 중에서 가장 작은 친구와
    새롭게 들어오는 컵라면 을 비교해야겠다 판단함.

  • 1) 컨테이너 사이즈가 컵라면 데드라인보다 작다는 것은 컵라면 바로 추가가 가능하는 거다.

  • 2) else 라고 한다면 top에 있는거 pop 하고 더 좋은 컵라면을 넣자.

  • 그리고 반드시 sort 가 필요하다. 데드라인 작은거부터 진행해서
    문제를 먼저 풀어야 하기 때문이다. 하지만, top 비교는 반드시 필요하다.


알고리즘 유형

  • pq.top()을 낮게 만들기 문제.

: for문 돌리면서 pq.top이 마음에 들지 않으면
pq.pop 해버리기

  • 다른 유형은 백준 1202 보석 도둑.

문제 풀이 전략

  • 예시가 하나만 있다면 거기에 속지 말고, 반례를 생각하자.

  • 문제를 읽어보고
    만약
    데드라인, 컵라면수 라고 하자.

(6,10) (1,5) (1,15) (1,2)
인데 그러면 6의 경우는 1day에도 할 수 있다는 건데
그런데 굳이 1day에 해서 최대값이 나올것인가??? 를 생각 할 수 있따.

  • 배치에 대해서 생각할 수 있는데,
    오름차순으로 배치하면 (6,10) 은 배치에 대해서 생각할 필요가 없어진다.

(1,5) (1,15) (1,2) (6,10) 이렇게 배치할 수 있고,
1의 경우에는 second 값이 큰거를 고르기만 하면 된다.

핵심.

  • 최대값을 만들어라 문제는
    최대를 많이 하게 하고? 최소를 적게 해야 한다?
    -> 최대값은 그리디 문제이고, 정렬 그리고 pq를 통해 처리할까? 라는 생각을 가지고 접근하자.

  • pq에 day,cnt를 넣을 건데, pq의 count값과 넣으려는 day값이 동일하다는 것은 이미 pq의 데드라인과 나의 데드라인이 같다는 것을 의미한다.

  • 뭔가 pq를 통해서 어떻게 처리할수 있을까?? 를 생각해보자.

profile
🔥🔥🔥

0개의 댓글