[Algo/Programmers] 자바 - 위장

7286 단어 JavaalgorithmJava

[Algorithm/Programmers] 자바 - 다단계 칫솔 판매

문제플랫폼난이도유형풀이 링크문제 링크
위장ProgrammersLevel 2Hash풀이문제

문제 해석

Stirng[][] clothes 라는 2차원 배열로 <옷의 종류, 특정 옷> 이 주어집니다.
이 때, 서로 다른 옷의 조합의 개수를 구해야하는 문제입니다.

옷의 개수는 간단한 사고로도 구할 수 있을 것 같습니다.
1. 스파이는 하루에 최소 한 개의 의상을 입습니다.
2. 같은 이름을 가진 의상은 존재하지 않습니다.
=> 입을 수 있는 의상 조합의 개수는

옷의 개수(하루에 하나의 옷을 입는 경우) + 종류 별 곱

중복되지 않는 분류에 맞게 각각의 물체들이 주어지므로 HashMap을 이용해볼 수 있을 것 같습니다.

주어진 clothes는 중복없이 들어오므로 종류에 따른 개수만 추가해주면 될 것 같습니다.

private HashMap<String, Integer> initMap(String[][] clothes) {

    HashMap<String, Integer> map = new HashMap<>();
    int len = clothes.length;
    for (int i = 0; i < len; i++) {
        // map에 해당 키값이 있다면,
        if (map.containsKey(clothes[i][1])) {
            // 해당 키의 value + 1
            map.put(clothes[i][1], map.get(clothes[i][1]) + 1);
        } else {
            // 해당 키값으로 value 1 초기화
            map.put(clothes[i][1], 1);
        }
    }

    return map;
}
private int getNum(HashMap<String, Integer> map) {

    int num = 1;
    for (Integer value : map.values()) {
        num *= value + 1;
    }

    return num - 1;
}

좋은 웹페이지 즐겨찾기