Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- ip
- IT개발캠프
- App Runner
- CS
- 스나이퍼팩토리
- 프로세스
- 프로젝트캠프
- 자바스크립트
- 리액트
- 웅진씽크빅
- 네트워크
- cs #네트워크
- 타입스크립트
- react-query
- BFS
- 스레드
- javascript
- 알고리즘
- 유데미
- React.js
- Algorithm
- 해시
- react
- 인사이드아웃
- html
- 메모리
- 프로그래머스
- typescript
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- 개발자부트캠프
Archives
- Today
- Total
Bin's Blog
[프로그래머스] Level2 - 광물 캐기(Javascript) 본문
728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📝문제 요약
1️⃣ 마인은 곡괭이로 광산에서 광석을 캐려고 한다. 마인은 다이아몬드 곡괭이, 철 곡괭이, 돌 곡괭이를 0 ~ 5개까지 가지고 있으며, 곡괭이로 광물을 캘 때는 피로도는 소모된다.
2️⃣ 각 곡괭이는 종류에 상관 없이 광물 5개를 캔 후에는 더 이상 사용할 수 없다.
3️⃣ 곡괭이를 하나 선택해서 광물 5개를 연속으로 캐고, 다음 곡괭이를 선택해서 광물 5개를 연속으로 캐는 과정을 반복하며, 더 사용할 곡괭이가 없거나 광산에 있는 모든 광물을 캘 때까지 과정을 반복한다.
4️⃣ 최소한의 피로도를 return 해라.
✅ 정답 코드
function solution(picks, minerals) {
let answer = 0;
// 미네랄의 개수를 5로 나눈 값을 올림
let len = Math.ceil(minerals.length / 5);
// 곡괭이의 모든 개수를 더한다.
let maxLen = picks.reduce((a, b) => a + b);
let arr = [];
// 만약 곡괭이가 없으면 아무것도 캘 수 없으므로 0을 출력
if (maxLen === 0) return 0;
// 모든 곡괭이가 소진될 때까지(조건 만족)
minerals = minerals.slice(0, maxLen * 5)
// 미네랄의 개수를 5개로 나눈 값의 개수만큼 반복문 돌기
for (let a = 0; a < len; a++) {
// 광물 개수 파악
let obj = { d: 0, i: 0, s: 0};
// mineral을 0번째 부터 5번째까지 자른후 배열을 순회하면서
// 자른 배열의 해당 요소를 obj에 카운터
// v[0] == 문자열의 첫 번째 원소
minerals.splice(0, 5).map((v) => obj[v[0]]++);
// [다이아몬드 곡괭이, 철 곡괭이, 돌곡괭이] 순으로 점수 담기
arr.push([
obj.d + obj.i + obj.s,
obj.d * 5 + obj.i + obj.s,
obj.d * 25 + obj.i * 5 + obj.s
])
}
// stone 곡괭이로 캤을 때 가장 큰 값이 앞에 오도록 내림차순 정렬
// 배열을 순회 하면서 stone 곡괭이로 캤을 때 가장 큰 값은 다이아가 많다는 뜻(최소값이 될 수 있음)
arr
.sort((a, b) => b[2] - a[2])
.map((v) => {
// 다이아 곡괭이를 먼저 사용
if (picks[0] > 0) return picks[0]--, (answer += v[0]);
// 다이아 곡괭이가 없으면 철 곡괭이를 사용
if (picks[1] > 0) return picks[1]--, (answer += v[1]);
// 철 곡괭이가 없으면 돌 곡괭이 사용
if (picks[2] > 0) return picks[2]--, (answer += v[2]);
})
return answer
}
📚 중요 포인트
👉 splice 메서드를 활용해서 원소를 삭제하면서 다음 미네랄들을 캐야지 정확한 값이 나온다.
👉 총 피로도를 담은 배열에서 돌 곡괭이로 캤을 때의 피로도를 기준으로 정렬해야 한다. 그래야 피로도 최솟값을 받을 수 있다.
📔느낀점
👉 이렇게 배열 관련된 문제가 출제되면 메서드를 잘 활용해야 한다. 그리고 점수가 나오면 최고 점수를 고려하자.
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스] Level3 - 베스트앨범(Javascript) (0) | 2023.09.14 |
---|---|
[프로그래머스] Level2 - 전화번호 목록(Javascript) (0) | 2023.09.12 |
[프로그래머스] Level2 - 후보키(Javascript) (0) | 2023.08.24 |
[프로그래머스] Level2 - 혼자 놀기의 달인(Javascript) (0) | 2023.08.23 |
[프로그래머스] Level2 - 미로 탈출(Javascript) (0) | 2023.08.22 |