문제
https://www.acmicpc.net/problem/15728
접근
- 문제에 주어진 n의 범위가 크지 않으므로, 얻을 수 있는 점수들을 전부 계산해서 k개를 제외한 뒤 남아있는 카드로 만들 수 있는 값 중 최대값을 출력했다.
풀이
- 계산한 모든 점수를 가지고 있는 배열을 정렬해서 큰 순서대로 k개를 제하는데, 이미 전에 제거된 카드인지 확인하기 위해 Counter를 이용했다.
- 또한 k개를 제한 후, 배열에 남아있는 가장 큰 값을 바로 출력하면 안 되고 남아있는 카드로 해당 값을 만들 수 있는지 체크해야 한다.
from collections import Counter
n, k = map(int, input().split())
public = list(map(int, input().split()))
team = list(map(int, input().split()))
check = Counter(team)
prod = [(x * y, y) for x in public for y in team]
prod.sort()
while k > 0:
num, i = prod.pop()
if check[i] <= 0:
continue
else:
check[i] -= 1
k -= 1
while check[prod[-1][1]] <= 0:
prod.pop()
print(prod[-1][0])
'Python > Coding Test' 카테고리의 다른 글
1421 나무꾼 이다솜 (0) | 2022.02.23 |
---|---|
2563 전깃줄 (0) | 2022.02.22 |
16933 벽 부수고 이동하기 3 (0) | 2022.02.22 |
9996 한국이 그리울 땐 서버에 접속하지 (0) | 2022.02.17 |
10165 버스 노선 (0) | 2022.02.17 |