[프로그래머스] 금과 은 운반하기

섬섬's 개발일지·2022년 3월 2일
0

프로그래머스

목록 보기
49/50

문제

  • 도시를 짓기 위해서는 금 akg과 은 bkg이 전달되어야 합니다.
  • i번 도시에는 금 g[i]kg, 은 s[i]kg, 그리고 트럭 한대가 있습니다.
  • 편도로 이동하는데 t[i] 시간이 걸리고, 최대 w[i]kg 광물을 운반할 수 있습니다.

정수 a,b와 정수 배열 g,s,w,t가 매개변수로 주어집니다. 주어진 정보를 바탕으로 각 도시의 트럭을 최적으로 운행했을 때, 새로운 도시를 건설하기 위해 금 akg과 은 bkg을 전달할 수 있는 가장 빠른 시간을 구해 return 하도록 solution 함수를 완성해주세요.

코드

def solution(a, b, g, s, w, t):
    start, end = 0, int(4e15)
    answer = end
    
    while start <= end:
        mid = (start + end) // 2
        # 움직인 gold, silver 개수
        gold, silver = 0, 0
        total = 0 # 전체 개수
        
        for i, time in enumerate(t):
            # 광물을 옮기는 횟수
            move = (mid - time) // (time * 2) + 1
            if move * w[i] > g[i]:
                gold += g[i]
            else:
                gold += move * w[i]
            if move * w[i] > s[i]:
                silver += s[i]
            else:
                silver += move * w[i]
            if s[i] + g[i] < move * w[i]:
                total += s[i] + g[i]
            else:
                total += move * w[i]
        if gold >= a and silver >= b and total >= a+b:
            end = mid - 1
            answer = min(answer, mid)
        else:
            start = mid + 1
    return answer
profile
섬나라 개발자

0개의 댓글