Algorithm/Programmers

[Algorithm/Programmers] ๊ด‘๋ฌผ ์บ๊ธฐ - 172927 (L2/JAVA)

dpdms2148 2023. 7. 12. 23:58
728x90

๐Ÿ“‘๋ฌธ์ œ๋งํฌ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๐Ÿ’ป์ฝ”๋“œ

class Solution {
    static int answer = Integer.MAX_VALUE;
    public int solution(int[] picks, String[] minerals) {
        int[][] cost = {{1, 1, 1}, {5, 1, 1}, {25, 5, 1}};
        
        int n = 0;
        for(int i = 0; i < 3; i++){
            n += picks[i];
        }
        digging(new int[n], 0, picks, minerals, cost);
        return answer;
    }
    
    private void digging(int[] arr, int depth, int[] picks, String[] minerals, int[][] cost){
        if(depth == arr.length){
            int tired = 0;
            int index = 0;
            for(int i = 0; i < arr.length; i++){
                for(int j = 0; j < 5; j++){
                    if(index == minerals.length) break;
                    
                    int k = 0;
                    if(minerals[index].equals("diamond")) k = 0;
                    if(minerals[index].equals("iron")) k = 1;
                    if(minerals[index].equals("stone")) k = 2;
                    index++;
                    tired += cost[arr[i]][k];
                }
            }
            
            answer = Math.min(answer, tired);
            return;
        }
        
        for(int i = 0; i < 3; i++){
            if(picks[i] > 0){
                picks[i]--;
                arr[depth] = i;
                digging(arr, depth + 1, picks, minerals, cost);
                picks[i]++;
            }
        }
    }
}

โณํšŒ๊ณ 

  • dfs๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์ด๋ฅผ ํ–ˆ๋‹ค.
  • ์“ธ ๋„๊ตฌ๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•ด๋‘๊ณ  ํ•œ๋ฒˆ์— ํ”ผ๋กœ๋„๋ฅผ ๊ณ„์‚ฐํ–ˆ๋‹ค.
728x90