알고리즘/programmers
프로그래머스 레벨2 기능 개발 (JAVA)
dev-jo
2021. 9. 8. 22:12
오랜만에 알고리즘 포스팅
푼건 예전에 풀었지만
까먹을거 같아서 올립니다!
코드는 GitHub 에도 올려져 있습니다!
https://programmers.co.kr/learn/courses/30/lessons/42586
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
기능 개발입니다
2가지 방법으로 풀었는데
큐를쓴것과 큐를 안쓴것.
package level02;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
/**
*
* 기능 개발
*
*/
public class Programmers42586 {
//큐사용 좀 느림..
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> integers = new ArrayList<>();
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < progresses.length; i++) {
int n = (int) Math.ceil((double) (100 - progresses[i]) / speeds[i]);
queue.add(n);
}
while (!queue.isEmpty()) {
int answer = 1;
int x = queue.poll();
while (!queue.isEmpty()) {
if(queue.peek() <= x) {
answer++;
queue.poll();
} else {
break;
}
}
integers.add(answer);
}
int[] answer = new int[integers.size()];
for(int i=0; i<answer.length; i++) {
answer[i] = integers.get(i);
}
return answer;
}
// 큐 안쓴 방식 기본 속도 0.02
public int[] solution2(int[] progresses, int[] speeds) {
int[] answer = new int[100];
int x = (99 - progresses[0]) / speeds[0] + 1;
int count = 1;
int index = 0;
for (int i = 1; i < progresses.length; i++) {
int n = (99 - progresses[i]) / speeds[i] + 1;
if(n <= x) {
count++;
} else {
answer[index] = count;
count = 1;
index++;
x = n;
}
}
answer[index] = count;
int[] result = new int[index + 1];
for(int i=0; i<result.length; i++) {
result[i] = answer[i];
}
return result;
}
}
큐는 미리 걸리는 시간을 구해서 큐에 넣고
큐가 아닌건 매번 시간을 구하여
다음번째가 앞에있는것보다 걸리는 시간이 작다면
카운트를 올리고
이제 앞에 큐보다 오래걸리는 기능이 온다면
현재까지 계산된 카운트를 추가해주고
다시 돌립니다.
즉..
[93, 30, 55] | [1, 30, 5] | [2, 1] |
일 때
7 3 9 가 나옵니다
처음 7 이 구해졌으므로 count = 1
그다음 3이 7보다 작으므로 count = 2
그다음 9가 7보다 크니까 배열의 첫번째는 count = 2 가 들어가고
그다음 9가 마지막이니 1이 들억마ㅡ로
[2,1] 이 나오는 문제입니다..!