알고리즘

튜플로 리스트 저장하기(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] 이런식으로 썼어야 했다는것