본문 바로가기
Preparing Coding Test/Programmers L2

[Java/프로그래머스/해시] Level 2: 위장

by weero 2020. 12. 2.

문제

programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

참고 링크

2ssue.github.io/algorithm/programmers_42578/

 

[프로그래머스] 위장 JAVA

프로그래머스_위장 문제 풀이 코드 이 문제에서 필요한 것은 옷 종류의 개수가 몇 가지 있는지이다. 따라서 옷 종류의 이름은 쓸모없는 값이 된다. {옷 종류}:{총 개수} 와 같은 형태로 매칭되어

2ssue.github.io

 

코드

 

옷종류:총개수 로 이루어진 HashMap(key-value)을 구성한다.

이후 규칙을 찾아 공식화 하면 된다.

공식은 아래 주석에

 

import java.util.*;
/*
if 4종류의 옷과 그 옷이 {n, m, o, p}
(n+1)*(m+1)*(o+1)*(p+1)-1

n + m + o + p + n*m + n*o + n*p + m*o + m*p + o*p + n*m*o + n*m*p + n*o*p + m*o*p + n*m*o*p
= n*(o + p + o*p +1 + m*(o + p + o*p +1)) + m*(o + p + o*p +1) + o*p + o + p
= n*(o + p + o*p +1)(m+1) + m(o + p + o*p +1) + o + p + o*p +1 -1
= n*(o + p + o*p +1)(m+1) + (m+1)(o + p + o*p +1) -1
= (o + p + o*p +1)(m+1)(n+1) -1
= (o+1 + p(o+1))(m+1)(n+1) -1
= (m+1)(n+1)(o+1)(p+1)-1
*/
class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        
        for(int i=0; i<clothes.length; i++){
            if(map.get(clothes[i][1])==null)
                map.put(clothes[i][1],1);
            else
                map.put(clothes[i][1],map.get(clothes[i][1])+1);
        }
        
        for(String key: map.keySet()){
            answer*=(map.get(key)+1);
        }
        
        return answer=answer-1;
    }
}