title: "코딩테스트 연습 - 금과 은 운반하기"
image: "https://image.freepik.com/free-vector/landing-page-template-for-a-website_23-2147782747.jpg"
description: "어느 왕국에 하나 이상의 도시들이 있습니다. 왕국의 왕은 새 도시를 짓기로 결정하였습니다. 해당 도시를 짓기 위해서는 도시를 짓는 장소에 금 a kg과 은 b kg이 전달되어야 합니다."
url: "https://school.programmers.co.kr/learn/courses/30/lessons/86053"
문제 풀이
문제 접근
이분탐색으로 시간을 두고, 적절한 mid를 찾으면 된다.
시간을 조금 썼던 부분은, 최댓값 지정이였다.
금과 은, 그리고 이동거리를 따졌을때, 나오는 최대 시간으로 하면 모든 케이스들을 통과할 수 있다.
간단한 수도 코드 정리
Type/Paste Your Code
풀이 코드
classSolution{publiclongsolution(inta,intb,int[]g,int[]s,int[]w,int[]t){longanswer=-1;longleft=0;longright=(long)(1e9*2*1e5*2);while(left<=right){longmid=(left+right)/2;// 해당 시간 내에 운반할 수 있는 금과 은의 총합longtotalGold=0;longtotalSilver=0;longtotalAll=0;for(inti=0;i<g.length;i++){// mid 시간 내에서 왕복longtripCount=mid/(2*t[i]);// 편도 체크if(mid%(2*t[i])>=t[i]){tripCount++;}// 트럭 운반 최대량longmaxTransport=tripCount*w[i];// 금, 은 운반 가능량longtransportGold=Math.min(g[i],maxTransport);longtransportSilver=Math.min(s[i],maxTransport);// 금, 은 합쳐서 계산totalGold+=transportGold;totalSilver+=transportSilver;totalAll+=Math.min(g[i]+s[i],maxTransport);}// 금, 은 만족하는지 검사if(totalGold>=a&&totalSilver>=b&&totalAll>=(a+b)){answer=mid;right=mid-1;}else{left=mid+1;}}returnanswer;}}