[백준 그리디] 기타줄(python)

이진규·2022년 8월 13일
1

백준(PYTHON)

목록 보기
73/115

문제

https://www.acmicpc.net/problem/1049

나의 코드

"""

"""

from sys import stdin
input = stdin.readline

n, m = map(int, input().split())
package, piece = [], [] # 패키지, 낱개
flag = False
for _ in range(m):
    a, b = map(int, input().split())
    package.append(a)
    piece.append(b)

# 가격의 최솟값을 위해 정렬한다.
package.sort()
piece.sort()
answer = 0

while True:
    if piece[0] * 6 < package[0]: # 낱개 6개로 사는게 패키지로 사는 것 보다 싸다면 -> 예제 16 1 \n 7 1 - 정답 : 16, if문이 없으면 18이 나옴
        answer += piece[0] * n
        break
    else: # 낱개 6개보다 패키지로 사는게 싸다면
        package_cnt = n // 6 # 패키지로 살 수 있는 최대한의 개수로 산다
        n %= 6
        answer += (package_cnt * package[0])

        # 패키지로 사고 남은 줄을 낱개로 살때와 아니면 넉넉하게 패키지로 살때 뭐가 더 싼지 비교 후 산다.
        if package[0] > (n * piece[0]): # 남은 줄을 낱개로 사는게 싼 경우
            answer += (n * piece[0])
            flag = True
        else: # 남은 줄을 패키지로 사는게 싼 경우
            answer += package[0]
            flag = True

    if flag:
        break

print(answer)
    

설명

반복문 내에서 if piece[0] * 6 < package[0]: 이 부분을 주의 깊게 신경 써줘야 한다. -> 낱개로 6개 사는게 패키지(6개)로 살때보다 싼 경우

참고 자료

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글