[Programmers]-위장(해시)
문제
옷의 조합을 모두 고려하는 문제이다.
문제는 귀찮아서 안가져왔다. ((종류별의상 수+1)* 종류) -1이 답을 구하는 식입니다.
위의 식이 나온 이유는 종류별로 안입을 경우의 수도 있으니 +1있고 최소 한개의상을 입으니 모든 의상을 입지않는 경우의 수를 -1해주었기 때문이다.
코드
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
int cnt=0;//종류별 수
boolean[] done = new boolean[clothes.length];//수 셀때 포함했던것들은 구분하는 배열
String key = "";//종류값 담을 비교 키
for(int i=0;i<clothes.length;i++){
if(done[i]==true) continue;//구분한것은 넘어간다
key = clothes[i][1];//초기값
cnt=0;
for(int j=0;j<clothes.length;j++){
if(done[j]==true) continue;
if(clothes[j][1].equals(key)){
cnt++;
done[j]=true;
}
}
answer = answer*(cnt+1);
}
return answer-1;
}
}
요약
위의 내용이 처음 푼 코드이다. 설명도 이해하기 어렵고 코드를 쉽게 해보려고 다시 코딩했다.
import java.util.HashMap;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String,Integer> hm = new HashMap<>();
for(String[] key : clothes){//옷종류별 수를 해시맵에 담는다.
hm.put(key[1], hm.getOrDefault(key[1], 1) + 1);
}
for(String key : hm.keySet()){//종류별 수를 곱한다.
answer *= hm.get(key);
}
return answer-1;
}
}
설명
예를들어 모자 : 2, 상의 : 1 이면 (2+1) x (1+1) - 1 이 답이된다. -1한 이유는 조건에 아무것도 안입는 경우는 없기때문이다.
좀더 간결하고 연산만 해주면 되니 보기 좋아졌다.