똥그래미 코딩공장
백준 1049번(기타줄) 파이썬 본문
https://www.acmicpc.net/problem/1049
1049번: 기타줄
첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주
www.acmicpc.net
이 문제는 보자마자 그리디 문제라고 파악을 했고 수학적인 연산도 필요할것이라 생각했다.
그리디 문제는 가장 효율적인 방법을 찾아내야 한다. 그래서 푸는데 시간이 좀 걸린 문제였다.
import sys
n,m= map(int,sys.stdin.readline().split())
arr1 = []
arr2 = []
for i in range(m):
a,b = map(int,sys.stdin.readline().split())
arr1.append(a)
arr2.append(b)
min1=min(arr1)
min2=min(arr2)
if min1<min2*6: // 패키지가 더 싼경우
if min1<(n%6)*min2: // 패키지의 갯수(6개)를 제외하고 남은 줄의 값의 낱개 합이 일반 패키지보다 비싼경우
print((n//6)*min1+min1)
else:
print((n//6)*min1+(n%6)*min2)
elif min1>=min2*6: // 낱개가 더 싼경우
print(n*min2)
수학이 굉장히 필요한 문제였다. 오랜만에 머리를 좀 쓴 느낌이라 뿌듯했다.
for 문안에서 각각 패키지 리스트와 낱개 리스트를 만들어 가장 싼 패키지, 낱개를 구한다.
그리고 첫번째 조건문에서는 패키지가 싼 경우와 낱개가 더 싼 경우로 나눈 다음
위의 주석을 참고하여 풀면 된다.
이번 문제는 경우의수를 따지는게 까다로웠다. 하지만
I did it.
'Algorithm' 카테고리의 다른 글
| 백준 1120(문자열) 파이썬 (0) | 2022.12.22 |
|---|---|
| 백준 2579번(계단 오르기) 파이썬 (0) | 2022.12.22 |
| 백준 1475(방번호) 파이썬 (0) | 2022.12.21 |
| 백준 9012(괄호) 파이썬 (0) | 2022.12.21 |
| 백준 10250(ACM 호텔) 파이썬 (1) | 2022.12.21 |