[Algorithm - Programmers] 금과 은 운반하기

nunu·2023년 9월 14일
0

Algorithm

목록 보기
82/142

문제

https://school.programmers.co.kr/learn/courses/30/lessons/86053

진짜 어려웠던 문제...
나 코테 통과할 수 있을까?

제출 코드

class Solution {
   static boolean check(long time, int a, int b, int[] g, int[] s, int[] w, int[] t) {
        int length = g.length;
        long total = 0L;
        long tGold = 0L;
        long tSilver = 0L;

        for (int i = 0; i < length; i++) {
            long cnt = time / (2 * t[i]);
            if (time % (2 * t[i]) >= t[i])          //가능한 만큼 모두 왕복을 햇는데 편도로 갈 수 있을만큼 시간이 남았을 경우 -> 편도로 한번 주고 갈 수 있음
                cnt++;

            long mLoad = w[i] * cnt;
            tGold += Math.min(mLoad, g[i]);
            tSilver += Math.min(mLoad, s[i]);
            total += Math.min(g[i] + s[i], mLoad);
        }

        if (total >= a + b && tGold >= a && tSilver >= b) return true;
        return false;
    }
    static public long solution(int a, int b, int[] g, int[] s, int[] w, int[] t) {
        long str = 0;
        long end = (long) (1e9 * 2 * 1e5 * 2) ;
        long answer = end;
        while (str <= end) {
            long mid = (str + end) / 2;
            if (check(mid, a, b, g, s, w, t)){
                answer = Math.min(answer, mid);
                end = mid - 1;
            }
            else
                str = mid + 1;
        }

        return answer;
    }
}
profile
Hello, I'm nunu

0개의 댓글