-
[프로그래머스] 기능개발ALGORITHM/PROGRAMMERS 2021. 7. 26. 20:54
https://programmers.co.kr/learn/courses/30/lessons/42586?language=java
2021-07-26
1. 배열? (not queue)
12345678910111213141516171819202122import java.util.*;class Solution {public int[] solution(int[] progresses, int[] speeds) {List<Integer> list = new ArrayList<>();int prev = (int) Math.ceil((double)(100 - progresses[0]) / speeds[0]);;int count = 1;for(int i = 1; i < progresses.length; i++) {int tmp = (int) Math.ceil((double)(100 - progresses[i]) / speeds[i]);if(prev >= tmp) {count++;} else {prev = tmp;list.add(count);count = 1;}}list.add(count);int[] answer = new int[list.size()];for(int i = 0; i < list.size(); i++) answer[i] = list.get(i);return answer;}}cs #문제풀이
사실 위에 분류가 스택/큐로 되어 있는걸 못 보고 그냥 풀었다.
원리는 동일할 것이다. progresses 배열과 speeds 배열을 통해 각각 작업을 하는데 걸리는 시간을 구한다.
이 때, 기준 작업 (prev)보다 적은 시간이 걸리는 작업들의 경우에만 한 번에 배포가 가능하다. 그래서, prev 보다 오래 걸리는 작업 시간 전까지 하나로 묶어서 생각해주면 된다.
2. Queue
1234567891011121314151617181920212223242526import java.util.*;class Solution {public int[] solution(int[] progresses, int[] speeds) {Queue<Integer> q = new LinkedList<>();for(int i = 0; i < progresses.length; i++) {q.add((int)Math.ceil((double) (100 - progresses[i])/speeds[i]));}List<Integer> list = new ArrayList<>();if(!q.isEmpty()) {int prev = q.poll();int count = 1;while (!q.isEmpty()) {int cur = q.poll();if (prev >= cur) {count++;} else {list.add(count);prev = cur;count = 1;}}list.add(count);}return list.stream().mapToInt(Integer::intValue).toArray();}}cs #문제풀이
글을 쓰면서 스택/큐로 분류 되었다는걸 알아서, queue를 사용해서도 한 번 풀어봤다.
위와 같은 방식으로 풀었다.
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 짝지어 제거하기 (2017 팁스타운) (0) 2021.07.28 [프로그래머스] 이진 변환 반복하기 (0) 2021.07.27 [프로그래머스] 올바른 괄호 (0) 2021.07.26 [프로그래머스] h-index (정렬) (0) 2021.07.26 [프로그래머스] N개의 최소공배수 (0) 2021.07.26