Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

똥그래미 코딩공장

백준 1049번(기타줄) 파이썬 본문

Algorithm

백준 1049번(기타줄) 파이썬

동그라미_ssu 2022. 12. 22. 19:18

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