의상(프로그래머스 Lv_2)

2023. 6. 26. 01:06알고리즘

 

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        Map<String,ArrayList<String>> a=new HashMap<String,ArrayList<String>>();

        for(int i=0;i<clothes.length;i++)
        {
            if(!a.containsKey(clothes[i][1]))
                a.put(clothes[i][1],new ArrayList<String>());
                
            a.get(clothes[i][1]).add(clothes[i][0]);
        }
        
        for(String key : a.keySet()){
            answer=answer*(1+a.get(key).size());
        }
        
        answer=answer-1;
        
        return answer;
    }
}

해시맵의 값을 배열로 할당해주어 해시맵을 구성하였다.

수학적 알고리즘으로 a가지의 의상1과 b가지 의상2가 있다면 총 가짓수는 a+b+ab 이며, a가지의상1과 b가지의상2, c가지의상3은 

a+b+c+ab+ac+bc+abc이다. 즉 (1+a)(1+b)(1+c)-1이다. 이 방식으로 알고리즘은 구현하면 된다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/42578?language=java 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr