풀긴했는데 너무 비효율적이게 푼거같다.. 나중에 수정해야지 ㅠㅠ
// LV2. 광물캐기 23.03.29
public static int solution_mineral2(int[] picks, String[] minerals) {
return IntStream.iterate(0,i->i+5).limit(Arrays.stream(picks).sum())
.mapToObj(r -> Arrays.stream(minerals)
.skip(r).limit(5)
.mapToInt(a->mineral.valueOf(a).ordinal()).boxed()
.collect(Collectors.toList()))
.sorted(Comparator.comparing((List<Integer> a)->a.stream().filter(b->b==0).count())
.thenComparing((List<Integer> c)->c.stream().filter(b->b==1).count())
.thenComparing((List<Integer> e)->e.stream().filter(f->f==2).count())
.reversed())
.mapToInt(s->{
// 이부분 정리를 못하겠다ㅠㅠ
int pick = 0;
while(picks[pick] == 0) pick++;
picks[pick]--;
int finalPick = pick;
return s.stream().mapToInt(i -> (int)Math.ceil(Math.pow(5, finalPick -i))).sum();
}).sum();
}
// LV2. 광물캐기 23.03.28
/*
enum mineral{diamond,iron,stone};
public static int solution_mineral(int[] picks, String[] minerals) {
int answer = 0;
// 총 곡괭이 수
int picksSum = Arrays.stream(picks).sum();
// int List 변환
List<Integer> mineList = Arrays.stream(minerals).mapToInt(a->mineral.valueOf(a).ordinal()).boxed().collect(Collectors.toList());
// 5개씩 나누기
int unit = 5;
List<List<Integer>> mineSubList = new ArrayList<>();
for(int i=0;i<picksSum;i++){
if (minerals.length < unit*(i+1)){
mineSubList.add(mineList.subList(unit*i,minerals.length));
break;
} else{
mineSubList.add(mineList.subList(unit*i,unit*(i+1)));
}
}
// sum 오름차순 정렬
mineSubList = mineSubList.stream().sorted(
Comparator.comparing((List<Integer> a)->a.stream().filter(b->b==0).count())
.thenComparing((List<Integer> c)->c.stream().filter(b->b==1).count())
.thenComparing((List<Integer> e)->e.stream().filter(f->f==2).count())
.reversed())
.collect(Collectors.toList());
// 곡괭이 선택 및 피로도 계산
int pick = 0;
for(List<Integer> list : mineSubList){
while(picks[pick] == 0){
pick++;
if(pick >= picks.length) return answer;
}
picks[pick]--;
for(Integer i :list) answer += Math.ceil(Math.pow(5,pick-i));
}
return answer;
}
*/
https://school.programmers.co.kr/learn/courses/30/lessons/172927
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] LV2. 최솟값 만들기 (0) | 2023.03.22 |
---|---|
[Programmers] LV2. 올바른 괄호 (0) | 2023.03.22 |
[Programmers] LV1 (0) | 2023.03.22 |
[Programmers] LV.2 귤고르기 (0) | 2023.03.20 |
[Programmers] LV2. 2개이하로 다른 비트 (0) | 2023.03.20 |