42578-偽装


😄 問題の説明


Description
スパイたちは毎日違う服を着て自分を偽装している.
例えば、スパイの服が以下のように、今日スパイが丸い眼鏡、長いコート、青いTシャツを着ている場合は、翌日はジーンズを追加したり、黒いサングラスをかけたりして、丸い眼鏡ではありません.
顔が丸いメガネ、黒いサングラスに青いTシャツのジーンズコートロングコート
スパイが持っている服に二次元配列の服が与えられた場合、異なる服の組み合わせの数を返すために解関数を作成します.
せいげんじょうけん
  • 服装の各行は「服装名、服装種類」からなる.
  • スパイが持っている服の数は1着以上30着以下.
  • のような名前の服は存在しません.
  • アパレルのすべての要素は文字列から構成されています.
  • すべての文字列の長さは、1または20未満の自然数であり、アルファベット小文字または「」のみから構成されます.
  • スパイは毎日少なくとも1枚の服を着ている.
  • I/O例
    clothesreturn[[yellow_hat, headgear], [blue_sunglasses, eyewear], [green_turban, headgear]]5[[crow_mask, face], [blue_sunglasses, face], [smoky_makeup, face]]3
    I/O例説明
    例1
    headgearに対応した服装は黄色hat、緑turban、眼鏡に対応した服装は青サングラスで、以下の5つの組み合わせが可能です.
    1. yellow_hat
    2. blue_sunglasses
    3. green_turban
    4. yellow_hat + blue_sunglasses
    5. green_turban + blue_sunglasses
    例2
    Faceに対応した服装はcrow mask,blue sunglasse,mocky paskであり,以下の3つの組み合わせが可能である.
    1. crow_mask
    2. blue_sunglasses
    3. smoky_makeup
    ソース:https://programmers.co.kr/learn/courses/30/lessons/42578

    💻 Javaコード

    import java.util.HashMap;
    
    class Solution {
        public int solution(String[][] clothes) {
    		int answer = 0;
    		int count =1;
    		
    		//<의상종류, 해당 의상종류의 개수>
    		HashMap<String, Integer> clothesHash = new HashMap<String, Integer>();
    		for(int i = 0; i <clothes.length ; i++) {
    			if(!clothesHash.containsKey(clothes[i][1])) {
    				// 새로운 의상 종류이면
    				clothesHash.put(clothes[i][1], 1);
    			} else {
    				// 이미 있는 의상 종류이면
    				clothesHash.put(clothes[i][1], clothesHash.get(clothes[i][1])+1);
    			}
    		}
    		for(String key : clothesHash.keySet()) {
    			count *= clothesHash.get(key)+1;
    		}
    		answer = count -1;
            
    		return answer;
    	}
    }