광물 캐기

Lee1231234·2023년 4월 26일

코딩테스트

목록 보기
44/95

광물을 곡괭이로 캘때 5개씩 캐야하며 순서대로만 캘수있음.
가장 최대피로도를 가장 좋은 곡괭이로 캐야함. ->정렬이 필요하다
광물은 순서대로만 캘수있음 5개씩 묶기때문에 곡괭이로 캘수있는 최대피로도 순으로 정렬하면 순서는 상관이 없어짐.

class와 시키거나 arraylist이외의 값을 사용해서 풀수도 있으나 null값 설정을 해줘야 하기 때문에 arraylist형식으로 푸는것이 null값에 대해서 자유로워질수있음

코드

import java.util.*;
class Solution {
    public int solution(int[] picks, String[] minerals) {        
        int pic=0;
        for(int i=0;i<3;i++){
            pic+=picks[i];
        }          
        ArrayList<int[]> list =new ArrayList<>();
        int s=0,i=0,d=0;
        for(int j=0;j<minerals.length;j++){
            switch(minerals[j]){
                case "diamond":
                    d++;
                    break;
                case "iron":
                    i++;
                    break;
                case "stone":
                    s++;
                    break;
            }
           
            if((j+1)%5==0){              
                list.add(new int[]{s,i,d,s+i*5+d*25});
                s=0;i=0;d=0;
                pic--;
            }
            if(j+1==minerals.length&&minerals.length%5!=0){             
                list.add(new int[]{s,i,d,s+i*5+d*25});
                s=0;i=0;d=0;
                pic--;
            }
            if(pic==0) break;
        }
        Collections.sort(list,(o1,o2)->o2[3]-o1[3]);
        int answer = 0;
        for(int j=0;j<list.size();j++){
            if(picks[0]!=0){
                answer+=list.get(j)[0]+list.get(j)[1]+list.get(j)[2];
                picks[0]--;
            }else if(picks[1]!=0){
                answer+=list.get(j)[0]+list.get(j)[1]+list.get(j)[2]*5;
                picks[1]--;
            }else if(picks[2]!=0){
                 answer+=list.get(j)[3];
                picks[2]--;
            }else break;
        }            
        return answer;
    }
  
}
profile
not null

0개의 댓글