🖥 시작하며
그리디 구현 문제다. 여러 가지의 조건이 존재하므로 잘 판단해야 한다.
중요한 부분은 브랜드를 교차해도 된다는 사실이다. 처음에 이거 고려 안했다가 틀렸다. 이를 통해 그냥 브랜드별 패키지, 낱개 최솟값을 가져오는 것부터 시작해야 유리하다.
# 모든 브랜드 중 패키지 최소 가격과 낱개 최소 가격 선택 brand_cost_6 = min(brand, key=lambda x: x[0])[0] # 패키지(6개) 최소 가격 brand_cost_1 = min(brand, key=lambda x: x[1])[1] # 낱개 최소 가격
최소 가격들을 가져온다.
이후 조건을 붙여 차근차근 풀어준다.
# 기타줄이 6개 미만 if N < 6: # 패키지 구매 vs 낱개 구매 중 선택 res = min(brand_cost_6, brand_cost_1 * N) # 기타줄이 6개 이상 else: tmp_6 = N // 6 # 패키지 수 tmp_1 = N % 6 # 낱개 수 # 패키지로만 구매 vs 낱개로만 구매 중 선택 res = min(brand_cost_6 * tmp_6, brand_cost_1 * tmp_6 * 6) # 남은 낱개에 대해 # 패키지 구매 vs 낱개 구매 중 선택 res += min(brand_cost_6, brand_cost_1 * tmp_1)
- 기타줄이 6개 미만인 경우
- 패키지를 구매하는 것과 낱개를 기타줄 개수만큼 구매하는 것 중 어느 것이 유리한지 판정해야 한다.
- 기타줄이 6개 이상인 경우
- 우선 패키지 묶음 개수와 낱개 개수를 나눈다.
- 이후 패키지로만 구매하는 것과 낱개를 기타줄 개수만큼 구매하는 것 중 어느 것이 유리한지 판정한다.
- 남은 낱개에 대해서도 판정한다.

⚙️ 코드
import sys input = sys.stdin.readline if __name__ == "__main__": # N : 기타줄의 개수, M : 브랜드의 수 N, M = map(int, input().split()) brand = [] res = 0 for _ in range(M): cost_6, cost_1 = map(int, input().split()) brand.append([cost_6, cost_1]) # 모든 브랜드 중 패키지 최소 가격과 낱개 최소 가격 선택 brand_cost_6 = min(brand, key=lambda x: x[0])[0] # 패키지(6개) 최소 가격 brand_cost_1 = min(brand, key=lambda x: x[1])[1] # 낱개 최소 가격 # 기타줄이 6개 미만 if N < 6: # 패키지 구매 vs 낱개 구매 중 선택 res = min(brand_cost_6, brand_cost_1 * N) # 기타줄이 6개 이상 else: tmp_6 = N // 6 # 패키지 수 tmp_1 = N % 6 # 낱개 수 # 패키지로만 구매 vs 낱개로만 구매 중 선택 res = min(brand_cost_6 * tmp_6, brand_cost_1 * tmp_6 * 6) # 남은 낱개에 대해 # 패키지 구매 vs 낱개 구매 중 선택 res += min(brand_cost_6, brand_cost_1 * tmp_1) print(res)
📌 소감
조건을 잘 생각하면 되는 문제다.
![[백준] 1049 - 기타줄](https://reo91004.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fb4dac9d0-810c-47c4-800c-0ca10b8d0529%2F59a6b96b-ea1e-4699-b4a7-7d4639037809%2Fi_baekjoon.png?table=block&id=118d2f02-2ff6-8002-8774-f9cabf7ef574&cache=v2)
![[백준] 1049 - 기타줄](https://reo91004.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fb4dac9d0-810c-47c4-800c-0ca10b8d0529%2F429a23f3-afb3-4642-a11b-60f2076a61f6%2Fw_baekjoon.jpg?table=block&id=118d2f02-2ff6-8002-8774-f9cabf7ef574&cache=v2)

댓글