본문 바로가기

알고리즘

프로그래머스 더 맵게

import java.util.*;
import java.util.stream.Collectors;

public class algo {
    public static void main(String[] args) {
        int[] scoville = {1, 2, 3, 9, 10, 12};
        int k = 7;

        solution(scoville, k);
    }

    public static class ScovilleMixInfo {
        private int firstScouvileNum;
        private int secondScouvileNum;
        private int mixedScouvileNum;

        public ScovilleMixInfo() {
        }
    }
    
    public static void mixedScovilleFood(PriorityQueue<Integer> pq) {
        ScovilleMixInfo scovilleMixInfo = new ScovilleMixInfo();
        
        scovilleMixInfo.firstScouvileNum = pq.poll();
        scovilleMixInfo.secondScouvileNum = pq.poll();

        scovilleMixInfo.mixedScouvileNum = scovilleMixInfo.firstScouvileNum + (scovilleMixInfo.secondScouvileNum * 2);

        pq.add(scovilleMixInfo.mixedScouvileNum);
    }
    
    public static int calcFoodMixingTime() {
        return 1;
    }

    public static int solution(int[] scoville, int K) {
        int totalMixedTime = 0;

        // Ascending sorting
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>(Arrays.stream(scoville).boxed().collect(Collectors.toList()));

        // mixing food until k-index border line
        while (pq.size() > 1 && pq.peek() < K) {
            mixedScovilleFood(pq);
            totalMixedTime += calcFoodMixingTime();
        }

        // afer mixing food, if scoville index is under border line, then return -1
        return pq.peek() < K ? -1 : totalMixedTime;
    }
}

 

알고리즘을 풀면서 내가 중점에 두는 요소는 3가지이다.

1. 가독성이 좋은가

2. 필요한 정보만 보여주는가(불필요한 내용이 없어야 한다 -> 위의 경우 totalMixdedTime++를 할수 있음에도 함수를 만들어 더한것은 그 편이 의미를 파악하기 더 쉽기 때문이다)

3. 유지보수 하기 좋게 확장성을 가지는가

 

나는 알고리즘이나 프로그램을 짤때에 위와 같이 3가지 요소를 중점으로 보고 수행한다.

'알고리즘' 카테고리의 다른 글

leetCode - twoSum  (0) 2022.02.03
프로그래머스 모의고사  (0) 2022.02.01
프로그래머스 가장큰수  (0) 2022.01.30
프로그래머스 완주하지 못한선수 (튜닝)  (0) 2022.01.29
프로그래머스 베스트앨범  (0) 2022.01.28