본문 바로가기
개발/Algorithm

[Softeer/금고털이/level2] 금고털이

by 킴과다페인(chae eun kim) 2023. 8. 4.

Softeer 금고털이(level2) 

2차원 배열 내림차순 정렬  data.sort(key = lambda x: x[1], reverse=True) #[[70, 5], [120, 3], [20, 1]]

 

import sys
input = sys.stdin.readline
# 귀금속 무게weight, 1 무게당 가격 price
# 최대 max_weight
# 가장 최대 가격으로 채우기
# 자를 수 있음. ->  무게당 가격 * 잘려진 무게

max_price = 0
weight, n = map(int, input().split()) # 최대무게, 귀금속 종류

#[[무게, 무게당 가격], ..]
data = [list(map(int, input().split())) for _ in range(n)] #[[90, 1], [70, 2]]

#무조건 무게당 가격이 높은 원소별로 소진시킴 -> 얘네들을 잘라서 넣으면되니까
#각원소의 1번 인덱스(무게당 가격) 기준으로 내림차순 sort
data.sort(key = lambda x: x[1], reverse=True) #[[70, 5], [120, 3], [20, 1]]

    
for i in data:
    if weight > i[0]: #필요한 무게 > 금속 무게보다 클 경우
        max_price += i[0] * i[1]
        weight -= i[0]
    else: #필요한 무게 < 금속 무게보다 적을 경우
        max_price += weight * i[1]
        break
    
print(max_price)

 

 

위 코드에서 수정할 사항!

- 2차원 배열의 원소를 돌 때 변수 2개에 할당 가능 for a, b in c

 

수정 전 코드

for i in data:
    if weight >= i[0]: #필요한 무게 > 금속 무게보다 클 경우
        max_price += i[0] * i[1]
        weight -= i[0]
    else: #필요한 무게 < 금속 무게보다 적을 경우
        max_price += weight * i[1]
        break

→ 수정사항 : 2차원 배열의 원소를 돌 때 변수 2개에 할당 가능 for a, b in c (GOOD)

이렇게하면 인덱스로 원소 접근안해도됨!

수정 후 코드 GOOD

for w, p in data:
	if weight > w:
		max_price += w * p
		weight == w
	else:
		max_price += weight * p
		break