[BOJ]백준#1049 Silver 4 기타줄 🎸🎻 (Python, 파이썬)

임준성·2022년 5월 25일
0

백준 Algorithm

목록 보기
15/59
post-thumbnail

백준 1049번
https://www.acmicpc.net/problem/1049


문제



후기

⏰ 풀이시간 10분 ++⏰

구현 하면서 이 문제가 왜 정답 비율이 36% 밖에 되지 않을까 라는 생각을 했었다.

우선 기타줄을 묶음으로 살 때와, 낱개로 살 때의 list를 따로 저장했고,

가장 싼 list 값으로만 사용하면 되기에 우전 오름차순으로 정렬했다.

기타줄을 낱개로 6개를 살 때의 값이 패키지로 6개를 살 때의 가격보다 쌀 때를 우선 넣었고,

나머지 경우에 대해서는 6개의 패키지로 최대한 많이 산 다음 나머지를 낱개로 사면 되는 것이

아닌가? 라는 생각에 답을 제출했더니 틀렸다고 나오는 것이었다.

그 원인은

22개를 6개씩 3묶음 샀을 때 4개가 남게 되는데, 이 때 만약 4개를 낱개로 사는 것보다 6개

묶음으로 샀을 때, 더 쌀 경우가 있는 것이었다.

ex) 6개씩 사면 30원인데, 낱개가 8원일때 4개를 사려면 묶음은 30원, 낱개는 32원이 소모된다.

이를 고려하여 elif 문을 작성하였더니 정답으로 출력되었다.

역시 정답률이 조금 낮은 문제는 예외 사항을 고려하는 습관을 들여야겠다.

나의 풀이

import sys

input = sys.stdin.readline

N, M = map(int,input().split())

li_pac = []
li_solo = []

for _ in range(M):

    a,b = map(int,input().split())

    li_pac.append(a) #패키지
    li_solo.append(b) #낱개

li_pac.sort() 
li_solo.sort()

result = 0


if li_solo[0] < li_pac[0] / 6:  #만약 낱개로 전부 사는게 패키지보다 싸면 

    result = li_solo[0] * N

elif li_pac[0] < li_solo[0] * (N%6):  #나머지를 낱개로 구매하는 것보다 그냥 패키지 하나를 더 사는게 더 싸면

    result = ((N//6)+1) * li_pac[0]

else: 

    result = ((N//6)*li_pac[0]) + (N%6) * li_solo[0]


print(result)
profile
아무띵크 있이

0개의 댓글