기능개발
문제: https://programmers.co.kr/learn/courses/30/lessons/42586
1. 문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
2. 나의 코드
- q: 완료되지 않은 모든 작업을 넣는 큐
- cq: 완료된 작업을 넣는 큐
- slist: 작업 스피드를 넣는 큐
- list: 해당 날짜에 완성된 작업의 개수를 넣는 ArrayList
- q와 slist를 각각 모든 작업과 작업속도를 넣는다.
- for문을 돌면서 모든 큐에 각요소에 해당하는 slist의 작업속도를 더한다.
- q.peek을 한 후 만약, top에 있는 작업이 100을 넘는다면, 100이 안넘는 작업이 나올때까지 cp에 100이 넘는 모든 작업을 넣는다.
- cp의 size를 list에 넣고 cp를 clear한다.
- list를 배열로 바꾼 후 리턴.
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = {};
Queue <Integer> q = new LinkedList<>();
Queue <Integer> cq = new LinkedList<>();
Queue <Integer> slist = new LinkedList<>();
ArrayList <Integer> list = new ArrayList<>();
for(int i: progresses){
q.offer(i);
}
for(int j: speeds){
slist.offer(j);
}
while(!q.isEmpty()){
int size = q.size();
for(int i =0; i < size; i++){
int temp = q.poll();
int stemp = slist.poll();
temp += stemp;
q.offer(temp);
slist.offer(stemp);
}
if(q.peek() >= 100){
for(int j=0; j < size; j++){
int temp2 = q.peek();
if(temp2 >= 100){
cq.offer(q.poll());
slist.poll();
}
else
break;
}
list.add(cq.size());
cq.clear();
}
}
answer = new int[list.size()];
for(int k=0;k <list.size();k++){
answer[k] = list.get(k);
}
return answer;
}
}
3. 다른사람 코드
- 각 작업당 필요한 날짜를 먼저 구해서 큐에 넣는다.
- 이후 for문을 돌면서, 위에 있는 남은 작업일수가 뒤에 있는 것 보다 크면, poll()을하고 count를 증가시킨다.
for(int i=0; i<progresses.length; i++){
int needDay = (100-progresses[i])/speeds[i];
if((100-progresses[i])%speeds[i]!=0) needDay++;
q.offer(needDay);
}
4. 보완
무작정 풀지말고, 좀만 생각해보면 기발한 아이디어가 나올것 같은데..
'Computer Science > 알고리즘 문제풀이' 카테고리의 다른 글
Programmers > 연습문제 > #32 N-Queen (0) | 2018.11.14 |
---|---|
Programmers > 연습문제 > #31 2 x n 타일링 (0) | 2018.11.14 |
Programmers > #28 winter recruit > #2 [JAVA] (0) | 2018.11.07 |
Programmers > 깊이/너비 우선 탐색(DFS/BFS) > #27 타겟 넘버 [JAVA] (0) | 2018.11.07 |
Programmers > 완전탐색 > #26 소수찾기(level 2) [JAVA] (0) | 2018.11.07 |