알고리즘
튜플로 리스트 저장하기(2개 이상의 값들 리스트로 저장하기)
Rogue One
2024. 1. 26. 18:23
https://www.acmicpc.net/problem/1049
1049번: 기타줄
첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주
www.acmicpc.net
브레인스토밍
N,M = map(int,input().split())
list = []
for _ in range(M):
a,b=map(int,input().split())
list.append((a,b))
list.sort(key=lambda x:x[0])
sum_min = list[0]
list.sort(key=lambda x:x[1])
each_min = list[1]
print(min(sum_min,each_min*N))
일단 로직적으로도 틀렸지만, 어떻게 자료를 저장하고 사용해야할지 몰랐다.
실제 코드
N, M = map(int, input().split())
prices = []
for _ in range(M):
package, each = map(int, input().split())
prices.append((package, each))
# 패키지와 낱개 가격의 최소값 찾기
min_package_price = min(price[0] for price in prices)
min_each_price = min(price[1] for price in prices)
# 최소 비용 계산
# 경우 1: 패키지만 사용
cost_package_only = ((N // 6) + 1) * min_package_price
# 경우 2: 낱개만 사용
cost_each_only = N * min_each_price
# 경우 3: 패키지와 낱개 혼합 사용
cost_mixed = (N // 6) * min_package_price + (N % 6) * min_each_price
# 세 가지 경우 중 최소 비용을 출력
print(min(cost_package_only, cost_each_only, cost_mixed))
우선 저런식으로 저장했을때 값들이 어떻게 저장되는지 예시를 통해 알고싶었다. 그리고 저렇게 저장하면 3번째 원소의 튜플 첫번째값은 어떻게 나타내는지도 궁금했다..
리스트에 값 저장하기
예를 들어, 다음과 같은 브랜드의 기타줄 가격이 입력된다고 가정해 보:
브랜드 A: 패키지 12, 낱개 3
브랜드 B: 패키지 15, 낱개 4
브랜드 C: 패키지 9, 낱개 2
이를 입력받아 리스트에 저장하면 다음과 같다:
prices = []
prices.append((12, 3)) # 브랜드 A
prices.append((15, 4)) # 브랜드 B
prices.append((9, 2)) # 브랜드 C
저장된 리스트는 다음과 같습니다:
prices = [(12, 3), (15, 4), (9, 2)]
리스트의 특정 원소 접근하기
이제 이 리스트의 특정 원소에 접근하는 방법을 살펴보자. 예를 들어, 세 번째 원소(브랜드 C)의 패키지 가격(첫 번째 값)을 얻으려면 다음과 같이 한다:
third_brand_package_price = prices[2][0]
여기서 prices[2]는 세 번째 원소 (9, 2)를 의미하고, prices[2][0]는 이 튜플의 첫 번째 요소, 즉 9를 의미하는것이다.
흠... 2차원 배열을 어떻게 사용해야겠다 고심했는데 이런 방법을 쓰는구나
처음 내 방식대로 lambda sort를 쓰려면
N, M = map(int, input().split())
prices = []
for _ in range(M):
package, each = map(int, input().split())
prices.append((package, each))
# 패키지 가격에 따라 정렬
prices.sort(key=lambda x: x[0])
min_package_price = prices[0][0]
# 낱개 가격에 따라 정렬
prices.sort(key=lambda x: x[1])
min_each_price = prices[0][1]
# 필요한 최소 비용 계산
cost_package = (N // 6) * min_package_price + (N % 6) * min_each_price
cost_package_only = ((N // 6) + (1 if N % 6 else 0)) * min_package_price
cost_each_only = N * min_each_price
print(min(cost_package, cost_package_only, cost_each_only))
로 작성해야했다. 그러니까, 정렬은 똑바로 했는데 값을 뽑아 쓰려면 이차원 배열마냥 [0][1] 이런식으로 썼어야 했다는것