728x90
반응형
목차
문제
https://school.programmers.co.kr/learn/courses/30/lessons/172927
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 구현 방향
문제의 까다로운 점은 5개 연속으로 캐야한다는 점이다. 이 조건 때문에 브루트포스로 해보았지만 콜스택 초과가 나기 때문에
그리디로 접근해야 한다.
문제 풀이
1. 먼저 장비 총 내구도 * 5 만큼만 캘 수 있으니 배열을 잘라준다.
2. 그 후 5개씩 광물을 잘라서 배열을 만들어 준다.
3. 다이아 철 돌 순으로 배열을 정렬해 준다.
4. 배열을 순회하면서 내구도를 감소시키며 피로도를 계산해준다.
문제 구현 시 가져갈 점
1. reduce의 응용 및 배열 5개씩 자르는 방법
const convertMineral = mineral.reduce((acc, cur, idx)=>{
const index = Math.floor(idx/5);
if(!acc[index]) acc[index] = [0,0,0];
if(cur === 'diamond'){
acc[index][0]++;
}else if(cur === 'iron'){
acc[index][1]++;
}else{
acc[index][2]++;
}
return acc;
}, [])
2. 정렬 방법
convertMineral.sort((a, b)=> b[0] - a[0] || b[1] - a[1]);
전체 코드
function solution(picks, minerals) {
var answer = 0;
const pickSum = picks.reduce((acc, cur)=>cur+acc, 0);
const mineral = minerals.slice(0, pickSum*5);
const convertMineral = mineral.reduce((acc, cur, idx)=>{
const index = Math.floor(idx/5);
if(!acc[index]) acc[index] = [0,0,0];
if(cur === 'diamond'){
acc[index][0]++;
}else if(cur === 'iron'){
acc[index][1]++;
}else{
acc[index][2]++;
}
return acc;
}, [])
convertMineral.sort((a, b)=> b[0] - a[0] || b[1] - a[1]);
convertMineral.forEach((item)=>{
let [dia, iro, sto] = item;
if(picks[0]){
picks[0]--;
answer += dia + iro + sto;
return;
}
if(picks[1]){
picks[1]--;
answer += dia*5 + iro + sto;
return;
}
picks[2]--;
answer += dia*25 + iro*5 + sto;
})
return answer;
}반응형
'PS > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][bfs] 리코쳇 로봇 bfs 구현 (1) | 2025.09.01 |
|---|---|
| [프로그래머스][그리디] 요격 시스템 (1) | 2025.09.01 |
| [프로그래머스][그리디] n+1 카드게임 (4) | 2025.07.10 |
| [프로그래머스][백트래킹][이분탐색][조합] 주사위 고르기 (1) | 2025.07.04 |
| [프로그래머스][map] 충돌 위험 찾기 (0) | 2025.07.04 |