문제
https://www.acmicpc.net/problem/7774
풀이
콘센트 - 첫 번째 멀티탭 - 두 번째 멀티탭 - 첫 번째 멀티탭 - 두 번째 멀티탭 ...
이렇게 반복해서 꽂을 수 있다는 점에 유의해야 한다.
우선 첫 번째 멀티탭과 두 번째 멀티탭을 콘센트 개수를 기준으로 정렬한다.
첫 번째 멀티탭 중 가장 많은 콘센트를 가지고 있는 멀티탭을 콘센트에 꽂고, 그 콘센트 개수만큼 두 번째 멀티탭을 선택해서 꽂는다(이 때도 가장 많은 콘센트를 가지고 있는 멀티탭부터 선택).
만약 첫 번째 멀티탭과 두 번째 멀티탭이 각각 한 개 이상 남았다면, 또다시 꽂을 수 있으므로 위의 과정을 반복한다.
n, m = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a.sort()
b.sort()
answer = 0
while True :
temp = a.pop() # 가장 많은 콘센트를 가지고 있는 멀티탭 선택하기
# 첫 번째 멀티탭에 포함된 콘센트 개수만큼 두 번째 멀티탭 꽂기
for _ in range(temp) :
if b :
answer += b.pop()
else :
break
if a and b : # 두 번째 멀티탭에 첫 번째 멀티탭을 또 꽂을 수 있는 경우
answer -= 1
else :
break
print(answer)
728x90