Python/online judge

Softeer [level2.금고털이] | Python

구름솜:D 2024. 1. 29. 19:40
728x90

✏️ 문제

https://softeer.ai/practice/6288

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

✏️ 풀이방법

1. n개의 귀금속의 무게(m)과 무게당 가격(p)를 리스트 형태로 2차원리스트(jewelry)에 담는다.

2. 가격이 비싼 순으로 담아야 하기 때문에 가격을 기준으로 내림차순 정렬하여 2차원리스트(sjewerly)에 담는다.

3. 가격이 높은 순으로 정렬된 2차원리스트(sjewelry)에서 귀금속의 무게(m)을 bag변수에 더해간다.

4. bag변수의 무게 총 합이 배낭의 무게(w)보다 커지면 break를 걸고 가방의 무게를 얼마나 초과되었는지를 확인하는 more변수를 생성한다.

5. 배낭에 마지막에 담는 무게는 귀금속의 무게에서 초과되는 무게를 빼고 담는다.

6. 배낭에 담은 귀금속의 무게(m)만큼 각 귀금속의 무게당 가격(p)을 곱해서 배낭에 담는 가장 비싼 가격을 계산해서 result변수에 담는다.

- 입력예제로 보면 가방의 무게는 100이고 2종류의 귀금속 1. 무게 90에 무게당 가격이 1원인 것 2. 무게 70에 무게당 가격이 2원인 것이 있다. 무게가 70인 귀금속의 가격이 비싸니까 가방에 70을 담고 나머지 30(100-70)을 무게당 가격이 1원인 귀금속 90중에 30을 담는다.

그럼 총 가방에 담은 가격은 (70*2)+(30*1) = 170이 된다. 

 

 

📌 코드

w, n = map(int,input().split())
jewelry = [list(map(int,input().split())) for _ in range(n)]
sjewelry = sorted(jewelry, key= lambda x:x[1], reverse=True)
bag = 0
i = 0
while True:
    bag += sjewelry[i][0]
    if w <= bag:
        more = bag-w
        break
    i +=1

sjewelry[i][0] = sjewelry[i][0]- more

result = 0
for j in range(i+1):
    result += sjewelry[j][0] * sjewelry[j][1]
print(result)

 

 

📌 결과

#입력
100 2
90 1
70 2

#출력
170