본문으로 바로가기

문제

프로그래머스 > 2022 SK ICT Family 신입 개발자 채용 챌린지 > 첫번째 문제

 

언어

JAVA

 

푼 문제

1 / 4

 

풀이시간 

1시간 (총 3시간)

 

후기

테스트에 사용된 문제를 남기는 것은 저작권에 위배된다고 하여 문제를 올리진 못합니다.

프로그래머스의 '2022 SK ICT Family 신입 개발자 채용 챌린지'에 대한 자료가 없어서 기록하려고 올립니다.

테스트 보셨던 분들 계시면 댓글 달아주시면 감사하겠습니다.😀

 

저는 첫번째 문제를 한 시간에 걸쳐 풀었습니다.

 

화폐 단위에 대한 생산 단가와 생산 가치를 담기 위해 TreeMap을 두 번 사용했습니다.

나중에 찾아보니 한 개 Key에 여러개 Value를 담을 수 있는 다른 방법이 있더군요.

Model 객체를 만들고 그 Model 객체 자체를 Map에 담으면 되는 거였습니다..

좀 더 효율적인 코드를 짤 수 있었는데 아쉽습니다.

 

추가로 생산 가치를 오름 차순으로 정렬하기 위해

Collection.sort 방법으로 comareTo 방식을 사용했습니다.

나중에 속도가 더 빠른 로직이 있는지 알아봐야겠습니다.

 

그럼 소스 코드 공유드리면서 글 마치겠습니다.

 

소스 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package SKICTFamily_BE_20220312;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map.Entry;
import java.util.TreeMap;
 
public class MinCostForProductCoin {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //Case1) 
        int money = 4578;
        int[] coinWon = {151050100500};
        int[] costs = {149935501000};
        
        //Case2) 
//        int money = 1999;
//        int[] coinWon = {1, 5, 10, 50, 100, 500};
//        int[] costs = {2, 11, 20, 100, 200, 600};
        
        // key: 화폐 단위, value : 생산 단가
        TreeMap<Integer, Integer> productReq = new TreeMap<Integer, Integer>();
        for (int i = 0; i < costs.length; i++) {
            productReq.put(coinWon[i], costs[i]);
        }
 
        // HashMap의 Key값을 자동으로 순서 배치
        TreeMap<Integer, Integer> minCostsSet = new TreeMap<Integer, Integer>();
        
        for (int i = 0; i < coinWon.length; i++) {
            // 500원을 만드는데 들어가는 비용
            int make500Won = costs[i] * (500 / coinWon[i]);
            
            // key : 화폐 단위, value : 500원을 만드는데 들어가는 비용, 
            minCostsSet.put(coinWon[i], make500Won);
        }
        
        // Map.Entry 리스트 작성
        List<Entry<Integer, Integer>> list_entries = new ArrayList<Entry<Integer, Integer>>(minCostsSet.entrySet());
 
        // 비교함수 Comparator를 사용하여 오름 차순으로 정렬
        // 500원을 만드는 비용이 적게 들어가는 순으로 배치
        Collections.sort(list_entries, new Comparator<Entry<Integer, Integer>>() {
            // compare로 값을 비교
            public int compare(Entry<Integer, Integer> obj1, Entry<Integer, Integer> obj2)
            {
                // 오름 차순으로 정렬
                return obj1.getValue().compareTo(obj2.getValue());
            }
        });
        
        
        int sumProductCost = 0;
        for (int i = 0; i < list_entries.size(); i++) {
            int value = list_entries.get(i).getKey();
            int key = list_entries.get(i).getValue();
            // 생산 가치
            int productCnt = money / value;
            // 생산 비용
            int productCost = productReq.get(value) * productCnt;
            
            money = money - (value * productCnt);
            // 총 생산 비용 (최소 비용)
            sumProductCost += productCost;
        }
        
        int answer = sumProductCost;
    }
 
}
 
cs


 

 

출처

프로그래머스 2022 SK ICT Family 신입 개발자 채용 챌린지

 

혹시나 코드 공유해주실 분 댓글 달아주시면 감사하겠습니다~🐢🐢🐢