https://programmers.co.kr/learn/courses/30/lessons/42578?language=java
지금까지 푼 문제중에 제일 짜증났던 문제 하루동안 못푼문제 다음날 10분에 끝남..
핵심 아이디어
1. 옷들을 종류별로 몇개있는지 분류한다
아무것도 안입었을 때의 경우의 수도 추가!
1)
HashMap<String, Integer> classification = new HashMap<String, Integer>(30);
- 옷의 갯수가 최대 30개이기 때문에 모두 다른 종류여도 30개가 최대
2) String [ ][ ] clothes를 분류
for(int i=0;i<clothes.length;i++){ //등록이 안된 종류일 경우 value를 2로 하여 등록 if(!classification.containsKey(clothes[i][1])){ classification.put(clothes[i][1], 2); } //등록이 된 경우는 value에 1 추가 else { classification.put(clothes[i][1], classification.get(clothes[i][1])+1); } }
2. 모든 종류의 옷을 1개씩 입었을 때의 경우의 수를 구한뒤 아무것도 안입은 경우의 수 1을 뺀다.
1) 종류가 1개만 나왔을 경우에는 옷의 갯수를 반환
if(classification.size()==1) { return clothes.length; }
2) 종류가 2개 이상인 경우
//분류햇을 때 종류가 두가지 이상인 경우 int sum = 1; for(String s : classification.keySet()){ sum *= classification.get(s); } return sum-1;
프로그래머스 최종코드
import java.util.*; class Solution { HashMap<String, Integer> classification = new HashMap<String, Integer>(60); public int solution(String[][] clothes) { for(int i=0;i<clothes.length;i++){ if(!classification.containsKey(clothes[i][1])){ classification.put(clothes[i][1], 2); } else { classification.put(clothes[i][1], classification.get(clothes[i][1])+1); } } if(classification.size()==1) { return clothes.length; } else { int sum = 1; for(String s : classification.keySet()){ sum *= classification.get(s); } return sum-1; } } }