[Python] 백준 1980번: 햄버거 사랑

SeungHyun·2023년 12월 4일

coding test

목록 보기
12/16
post-thumbnail

0. 기본 정보

0-A. 개요

python/백준 - 1980번 문제에 대한 분석임.

0-B. 문제 정보

백준 - 1980번: 햄버거 사랑


1. 정답 코드

n, m, t = map(int, input().split())


mx = max(n, m)
mn = min(n, m)

cnt = 0
burger = 0
coke = 10000

while t >= mx*cnt:
    temp_t = t - mx*cnt
    temp_burger = cnt
    temp_coke = 0

    temp_burger += temp_t//mn
    temp_coke += temp_t%mn

    if coke > temp_coke:
        burger = temp_burger
        coke = temp_coke
    elif coke == temp_coke and burger < temp_burger:
        burger = temp_burger
        coke = temp_coke

    cnt += 1
    

print(f"{burger} {coke}")

2. 핵심풀이

  1. 브루트포스 알고리즘 문제. 핵심은 콜라를 마시는 시간을 최소로 하면서 동시에 햄버거를 많이 먹어야 한다.
  2. 그렇다면 두 햄버거를 먹는 시간 n, m 중에서 큰 값을 가장 최소로하면서 작은 값을 최대로 하면 버거의 수가 제일 많아지지 않을까?
    (그리고 그 중에서 콜라를 마시는 시간이 최소인것들을 출력하면 그게 정답이지 않을까?)

2-a. 코드 분석

n, m, t = map(int, input().split())


mx = max(n, m)
mn = min(n, m)

cnt = 0
burger = 0
coke = 10000
  • 해당 문제를 풀기 위한 변수 입력 n, m, t
    (두 햄버거를 먹는 시간 및 콜라를 마시는 시간)
  • 두 햄버거를 먹는 시간 nm 중 더 큰 값을 mx, 작은 값을 mn에 입력한다.
  • cnt: 두 햄버거 중 먹는 시간이 더 오래 걸리는 햄버거를 몇번 먹을지에 대한 정수형 변수
    burger: 전체 햄버거를 먹는 횟수
    coke: 콜라를 마시는 시간 (추후 값을 비교하기 쉽도록 t의 최대값인 1만을 초기값으로 입력함.)

while t >= mx*cnt:
    temp_t = t - mx*cnt
    temp_burger = cnt
    temp_coke = 0
  • 여기서부터 마지막 문장을 제외한 나머지 부분은 전부 while문이다.
  • 두 햄버거를 먹는 시간 중 큰 값 mx와 해당 햄버거를 먹는 횟수 cnt의 곱이 t보다 클 수 없으므로 해당 조건을 while문의 조건으로 넣어준다.
  • temp_t, temp_burger, temp_coke
    각각 반복문 내에서 반복할때마다 1회성으로만 활용할 변수들이다.
  • temp_t: 먹는데 mx분 걸리는 버거를 cnt번 먼저 먹기 때문에 그만큼 시간을 빼준다.
  • temp_burger: 먹는데 mx분 걸리는 버거를 cnt번 먼저 먹기 때문에 초기값을 cnt로 설정해준다.

    temp_burger += temp_t//mn
    temp_coke += temp_t%mn

temp_burger: 먹는데 mn분 걸리는 버거를 먹은 횟수를 추가해준다.
temp_coke: 버거를 다 먹고 남은 시간을 추가해준다.


    if coke > temp_coke:
        burger = temp_burger
        coke = temp_coke
    elif coke == temp_coke and burger < temp_burger:
        burger = temp_burger
        coke = temp_coke

    cnt += 1
  • 만약 이번 회차의 temp_coke가 기존 coke변수보다 작다면
    burger변수에 이번 회차 버거를 먹은 횟수를
    coke변수에는 이번 회차 콜라를 마신 시간을 입력해준다.
  • 만약 coketemp_coke가 동일하면서 burger보다 temp_burger가 더 클 경우에는
    해당 문제 조건 2번에 의해 해당 변수들을 입력해준다.
  • 이후 먹는데 mx분 걸리는 버거를 먹는 횟수인 cnt를 1 증가시켜준다.

print(f"{burger} {coke}")
  • 마지막 정답을 출력해준다.
profile
어디로 가야하오

0개의 댓글