23년 5월 3일 [알고리즘 - 자료구조]

sua·2023년 5월 2일
0

알고리즘 가보자고

목록 보기
15/101

프로그래머스 의상

문제


나의 풀이

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를 리턴해주면 된다.

결과


profile
가보자고

0개의 댓글