무지의 먹방 라이브

Lee1231234·2023년 5월 4일

코딩테스트

목록 보기
50/95

처음 봤을때 k의 값이 long이고 효율성이 들어있어서 k를 이용한 배열이나 for문 순회는 효율성을 통과하지 못할것 같았다.
따라서 hashmap을 통해서 시간에 따른 몫의 개수를 구해서 그 값이 k값보다 커질때를 구해서 그 전값으로 순회를 돌리면 될것같았다.
코드

import java.util.*;
class Solution {
    public int solution(int[] food_times, long k) {
        int cycleLength= food_times.length;
        long foodSum = 0; 
        for (int i = 0; i < cycleLength; i++) {
            foodSum += food_times[i];
        }
        if (foodSum <= k) return -1;      
        HashMap<Integer,Integer> num = new HashMap<>();
        for(int food:food_times){          
            num.put(food,num.getOrDefault(food,0)+1);
        }   
        int count=0;
        long total = 0;    
        int length = 0;  
        while (total <= k) {                       
             if(num.containsKey(count)){
                length= num.get(count);
            }else{
                length=0;
             }
            cycleLength-=length;
            total += cycleLength;           
            count++;
        }
        long a =k-(total-cycleLength);
        for(int i=0;i<food_times.length;i++){
            if(count<=food_times[i]){
                if(a==0){
                    return i+1;
                }else{
                    a--;
                }
            }
        }
        return 0;
    }
}

이러한 방법으로 풀기는 했지만 우선순위 큐를 통해서 값을 구하는 방법도 있었고
몫과 나머지를 이용한 풀이방법도 있었다. 특히 몫과 나머지를 이용한 풀이방법이 최적화가 제대로 된 모습이었다.

profile
not null

0개의 댓글