본문 바로가기

반응형

1. 의상

https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

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

programmers.co.kr

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        Map<String, Integer> cate = new HashMap<>();
        
        for(int i = 0; i < clothes.length; i++){
            if(cate.get(clothes[i][1]) == null){
                cate.put(clothes[i][1], 1);
            } else {
                cate.put(clothes[i][1], cate.get(clothes[i][1])+1);
            }
        }
        
        int answer = 1;
        
        for(Map.Entry<String, Integer> cateEntry : cate.entrySet()){
            int val = cateEntry.getValue();
            
            answer *= val + 1;
        }
        
        return answer-1;
    }
}

의상 종류와 개수만 알면 풀 수 있는 문제입니다.
A종류 의상이 a개, B종류의 의상이 b개, C종류의 의상이 c개 일 때 하나 씩 만 입으면 a+b+c, 두 개 씩만 입을 땐 ab+bc+ac, 세 개를 입으면 abc 이렇게 되죠. 그러면 abc + ab+bc+ac + a+b+c가 되는데 이는 +1 -1 해주는 것과 같습니다. 그렇다면 abc + ab+bc+ac + a+b+c +1-1 이 되고 이는 (a+1)(b+1)(c+1)-1인수분해 할 수 있게 되는 겁니다.
그래서 종류를 기준으로 카운팅을 하고 개수+1개씩 곱해준 뒤 -1해준 값을 return 해주면 되는 것이죠.

 

반응형
댓글