yjyj1027   3년 전

이 문제를 그리디로 해결하려는 중에 제 풀이에서 틀린점을 찾고자 질문 올립니다.

제 풀이는 아래와 같습니다.

1. [l,r] 구간으로 표현되는 "사람"들을 우선순위 큐에 집어넣습니다. 정렬 기준은 r이 큰 순서, l이 큰 순서입니다.

   -> "사람"들이 pq.top()부터 다음과 같은 형태로 정렬됩니다.

                  [        ]

             [       ]

         [           ]

2. 비싼 마스크부터 분배합니다. 역시 마스크도 정렬해서 사용합니다.

3. 마스크를 분배하는 로직입니다. 지금 분배하려는 마스크의 가격이 val, 개수가 cnt입니다. 현재 pq.top()의 l, r을 가져와서,

  3-1. r < value 라면 이 마스크는 누구에게도 줄 수 없습니다. 마스크 인덱스를 넘깁니다.

  3-2. l <= val 이라면 마스크를 이 사람에게 분배합니다. 정답++, 해당 마스크개수--, pq.pop()을 수행합니다.

  3-3. val < l 이라면 이 사람에게 줄 수 있는 마스크가 없습니다. pq.pop()을 수행합니다.

이 로직에서 틀린 점이 있다면 어떤 부분인지 궁금합니다.

소스코드를 함께 첨부합니다.

-------------------------------------

snrnsidy   3년 전

제가 아까 반례를 잘못 올렸는데 찾아보고 다시 올려볼게요

snrnsidy   3년 전

2 2

1 5

2 4

1 1

2 1

답 ) 2

yjyj1027   3년 전

왜 틀렸는지 알았습니다. 감사합니다.

댓글을 작성하려면 로그인해야 합니다.