Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- leetcode
- 자바
- java 프로그래머스
- 파이썬
- 인텔리제이 에러
- 프로그래머스
- 분할정복
- 코테
- 그래프 자바
- 백준 16935
- 자바 5464
- 백준
- DP
- 스택
- Java
- 프로그래머스 java
- daily challenge
- java leetcode
- 카카오
- 코딩테스트
- dfs
- BFS
- 리트코드
- 스프링 에러
- leetcode 1721
- 리트코드 1557
- 구현
- 자바 리트코드
- 리트코드 자바
- 백준 18222
Archives
- Today
- Total
레벨업 일지
[Java] 프로그래머스 광물 캐기 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/172927
풀이
문제를 잘 읽자 ! 처음에 아래 조건들을 하나같이 반대로 이해해서 잘못 구현했다.
사용할 수 있는 곡괭이중 아무거나 하나를 선택해 광물을 캡니다
.한 번 사용하기 시작한 곡괭이는 사용할 수 없을 때까지 사용합니다.
광물은 주어진 순서대로만 캘 수 있습니다.
광산에 있는 모든 광물을 캐거나, 더 사용할 곡괭이가 없을 때까지 광물을 캡니다.
완전 탐색으로 구현했다. 이유는 조건의 길이들이 길지가 않아 완탐으로 충분히 구현가능하기 때문이다.
풀이는 다음과 같다.
- 백트래킹으로 곡괭이들의 조합을 구한다.
- 곡괭이 조합으로 모든 경우의 cost를 구해 minCost를 구한다.
코드
자바
import java.util.*;
import java.util.stream.*;
class Solution {
//다이야0 철1 돌2
//곡괭이는 5번 사용하면 터짐
HashMap<String, Integer> map ;
int[][] cost;
String[] minerals;
int minLen;
public int solution(int[] picks, String[] minerals) {
map = new HashMap<>();
int index = 0;
this.minerals = minerals;
minLen = Integer.MAX_VALUE;
map.put("diamond", index++);
map.put("iron", index++);
map.put("stone",index++);
cost = new int[][]{{1,1,1},{5,1,1},{25,5,1}};
int pickLen = 0;
for(int x : picks)pickLen+=x;
dfs(new int[pickLen], 0, picks);
return minLen;
}
public void dfs(int arr[], int L, int[] picks){
if(L == arr.length){
minLen = Math.min(minLen , getLen(arr));
return;
}
for(int i= 0; i< picks.length; i++){
if(picks[i]>0){
picks[i]--;
arr[L] = i;
dfs(arr, L+1, picks);
picks[i]++;
}
}
}
//곡괭이 종류info[], 곡괭이 개수 pick, map
public int getLen(int[] arr){
int ret = 0;
int mIndex = 0;
for(int x : arr){
int cnt = 5;
while(cnt-- > 0){
if(mIndex == minerals.length)return ret;
ret += cost[x][map.get(minerals[mIndex++])];
}
}
return ret;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 석유 시추 (0) | 2023.12.02 |
---|---|
[Java] 프로그래머스 파괴되지 않은 건물 (0) | 2023.02.23 |
[Java] 프로그래머스 유전법칙 (0) | 2023.02.16 |
[Java] 프로그래머스 올바른 괄호 (0) | 2023.02.14 |
[Java] 프로그래머스 이모티콘 할인 (1) | 2023.02.08 |
Comments