📝 문제
https://programmers.co.kr/learn/courses/30/lessons/42578?language=java
🎯 풀이
점화식을 찾아내면 Hash는 그저 배열 분류용도로만 사용된다.
((모자개수 + 1) * (하의개수 + 1) * (겉온개수 + 1) * …) - 1
Hash의 value로 들어간 list나 array의 길이값+1을 계속 곱하고
마지막에 1을 차감해서 반환하면 정답이 된다.
import java.util.*;
import java.util.Map.Entry;
class Solution {
public int solution(String[][] clothes) {
// String, List 자료형 HashMap 선언.
HashMap<String, List> spy = new HashMap<>();
for (int i = 0; i < clothes.length; i++) {
List<String> wear;
// 아직 추가되지 않은 분류라면?
if (!spy.containsKey(clothes[i][1])) {
wear = new ArrayList(); // wear List 생성.
spy.put(clothes[i][1], wear); // HashMap에 추가!
}
wear = spy.get(clothes[i][1]); // 분류에 해당되는 List 가져오기.
wear.add(clothes[i][0]); // List에 옷 추가.
spy.put(clothes[i][1], wear); // 다시 집어 넣기.
}
int answer = 1;
for (Entry<String, List> s : spy.entrySet()) {
answer *= s.getValue().size()+1; // 점화식 적용!
}
return answer - 1;
}
}
👏 더 나은 풀이
import java.util.HashMap;
import java.util.Iterator;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> map = new HashMap<>();
for(int i=0; i<clothes.length; i++){
String key = clothes[i][1];
if(!map.containsKey(key)) {
map.put(key, 1);
} else {
map.put(key, map.get(key) + 1);
}
}
Iterator<Integer> it = map.values().iterator();
while(it.hasNext()) {
answer *= it.next().intValue()+1;
}
return answer-1;
}
}
어차피 중복되는 옷은 존재하지 않으므로 그냥 정수로 계산해도 됐다.
이런…
댓글남기기