[백준] 4716. 풍선

newbieski·2022년 2월 10일
0

백준

목록 보기
104/210

https://www.acmicpc.net/problem/4716

문제요약

  • 팀마다 필요한 풍선이 있고, 두 지점에서 가지고 올 수 있음. 물론 두 지점에서 가지고 오는 비용이 각각 있음(하나 옮길때마다 드는 비용)
  • 각지점마다 풍선이 있음. 두 지점 풍선의 합은 충분함. 합이 충분하다는 이야기이지 한쪽에서만 가져가면 물론 부족할 수도 있음
  • 팀 : 1000개, 풍선 : 각각 1만개
  • 최소 비용 구하기

접근법

  • 기회 비용을 생각해야함
  • 어느 지점에서든 풍선을 가지고 와야할텐데, 한쪽을 포기했을때 드는 비용만큼이 추가 비용일 것임
  • 즉 각각의 풍선마다 (A에서 가져왔을때, B에서 가져왔을때)를 비교해서 한쪽을 포기했을때의 기회비용을 계산해서 기회비용 오름차순으로 정렬을 하면
  • 기회비용이 큰 것부터 유리한 곳에서 가져오게 하는 것이 전체적으로 유리해짐

구현

  • 구현은 다른 사람 간결한 코드를 봐서 기록해둠
  • 정렬이후에 A 또는 B에서 가져오는 처리를 코드로 나열했는데 수식으로 깔끔해질 수 있음
  • A에서 가져오는 개수를 x로 두면 B에서 가져오는 개수는 k - x개임
  • A < B이면 min(k, A), k - min(k, A)가 되고
  • B > A이면 k - min(k, B), min(k, B) 처리를 해야하는데 그럴 것 없이
  • A < B 이면 x = min(k, a), B > A 이면 x = k - min(k, B)로 두고
  • 나중에 계산할때, x, k - x로 처리하면 됨
profile
newbieski

0개의 댓글