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 |