BOJ - 1049

주의·2024년 1월 9일
0

boj

목록 보기
61/214

백준 문제 링크
기타줄

❓접근법

  1. 가장 저렴한 브랜드만을 사용할 것이므로
    6개 패키지의 가격인 six 변수와 1개의 가격인 one 변수를 만들어서
    오름차순으로 정렬해 가장 첫번째 요소를 사용했다.
  2. 조건은 다음과 같다.
  • if N <= 6 일 때
    • if six[0] <= N × one[0] : answer = six[0]
      else : answer = N × one[0]
  • else 일 때
    if ((N // 6) + 1) × six[0] <= (N // 6) × six[0] + (N % 6) × one[0]:
    answer = ((N // 6) + 1) × six[0]
    elif (N // 6) × six[0] + (N % 6) × one[0] <= N × one[0]:
    answer = (N // 6) × six[0] + (N % 6) × one[0]
    else:
    answer = N × one[0]
  1. N <= 6일 때는 조건이 쉬운데 N > 6일 때는
    1) 만약 N = 15, six[0] = 100, one[0] = 40 이라고 하자.
    여기서 3 × 100 <= 2 × 100 + 3 × 40 이므로 answer = 300
    2) 만약 N = 10, six[0] = 20, one[0] = 4 라고 하자.
    여기서 첫번째 조건은 성립이 안되므로 elif로 넘어간다.
    이제 여기서 1 × 20 + 4 × 4 <= 10 * 4 이므로 answer = 36
    3) 그 외에는 모두 낱개로 사는 것이 적절하다.

👌🏻코드

N,M = map(int, input().split())
six = []
one = []
for _ in range(M):
    x,y = map(int, input().split())
    six.append(x)
    one.append(y)
    
six, one = sorted(six), sorted(one)

answer = 0
if N <= 6:
    if six[0] <= N * one[0]:
        answer = six[0]
    else:
        answer = N * one[0]
else:
    if ((N // 6) + 1) * six[0] <= ((N // 6) * six[0] + (N % 6) * one[0]):
        answer = ((N // 6) + 1) * six[0]
    elif ((N // 6) * six[0] + (N % 6) * one[0]) <= N * one[0]:
        answer = ((N // 6) * six[0] + (N % 6) * one[0])
    else: 
        answer = N * one[0]
        
answer

0개의 댓글