12. 해쉬 - 위장

coding by 스플릿·2022년 1월 14일
0

스터디

목록 보기
11/11

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;
        }
    }
}

0개의 댓글

관련 채용 정보