import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> map = new HashMap<>();
for (String[] c : clothes) {
map.put(c[1], map.getOrDefault(c[1], 0) + 1); // 의상 종류별로 구분
}
for(String key : map.keySet()) {
answer *= map.get(key) + 1; // 의상 종류별 의상 수를 곱함. 입지 않는 경우를 고려하기 위해 +1
}
return answer - 1; // 어떤 종류도 입지 않은 경우가 1가지 있기 때문에 -1 해줌
}
}
해시맵을 생성해서 의상 종류별로 의상들을 구분해주어 저장한다. 그런 다음 map을 for문을 돌려서 key에 해당하는 갯수의 +1한 값을 answer에 곱해줘서 경우의 수를 구한다. 마지막에는 어떤 종류도 입지 않은 경우가 중복되었기 때문에 1을 빼주어 리턴해주면 된다.
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int s : scoville) {
pq.offer(s);
}
while(!pq.isEmpty()) {
int current = pq.poll();
if(current < K) {
if(pq.size() == 0) {
return -1;
}
int next = pq.poll();
int sum = current + next * 2;
pq.offer(sum);
answer++;
}
}
return answer;
}
}
우선순위큐를 사용해서 스코빌 지수가 낮은 순으로 나올 수 있도록 한다. 그런 다음 섞은 음식의 스코빌 지수를 우선순위큐에 삽입해주고 우선순위큐가 빌때까지 반복해준다. 우선순위큐의 사이즈가 0인데도 K보다 작다면 답이 없는 것이기 때문에 -1을 리턴해주고 그게 아니라면 반복한 횟수만큼 증가시켜준 answer를 리턴해주면 된다.