19580번 - 마스크가 필요해
이 문제를 그리디로 해결하려는 중에 제 풀이에서 틀린점을 찾고자 질문 올립니다.
제 풀이는 아래와 같습니다.
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()을 수행합니다.
이 로직에서 틀린 점이 있다면 어떤 부분인지 궁금합니다.
소스코드를 함께 첨부합니다.
-------------------------------------
제가 아까 반례를 잘못 올렸는데 찾아보고 다시 올려볼게요
2 2
1 5
2 4
1 1
2 1
답 ) 2
왜 틀렸는지 알았습니다. 감사합니다.
댓글을 작성하려면 로그인해야 합니다.
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()을 수행합니다.
이 로직에서 틀린 점이 있다면 어떤 부분인지 궁금합니다.
소스코드를 함께 첨부합니다.
-------------------------------------