기록을 합시다.
[프로그래머스] 기능개발(python/java) 본문
문제 요약
- 모든 기능들은 매일 개발 하되, 맨 앞의 일들이 개발 완료된 후에야 뒤에 완료된 연속된 일들도 동시에 배포한다.
- 한 번 배포할 때, 몇 개의 기능들을 배포하게 되는지 구하라.
내가 생각한 로직
- 첫 번째 기능의
100-현재 진행상황
을 구하고, 이를 개발 속도와 나눠 총 며칠 후에 개발이 완료되는지 확인한다. - 구한 일 수를 가지고, 모든 기능들의 개발 상황에
개발 속도*구한 일 수
를 더해준다.
파이썬으로 제출한 정답
import math
import collections
def solution(progresses, speeds):
q = collections.deque(progresses);
s = collections.deque(speeds);
answer = []
count = 0
while q:
if q[0] >= 100:
count += 1
if len(q) == 1:
answer.append(count)
q.popleft()
s.popleft()
continue
if count != 0: #count가 0이 아닐 때
answer.append(count)
count = 0
tmp = (100-q[0]) % s[0]
days = 0
if(tmp == 0):
days = (100-q[0])//s[0]
else:
days = (100-q[0])//s[0] + 1
for i in range(len(q)):
q[i] += (s[i] * days)
return answer
자바로 제출한 정답
import java.util.*;
class Solution {
public List<Integer> solution(int[] progresses, int[] speeds) {
List<Integer> answer = new ArrayList<>();
List<Integer> p = new ArrayList<>(Arrays.asList(progresses));
List<Integer> s = new ArrayList<>(Arrays.asList(speeds));
int count = 0;
while(!p.isEmpty()){
if(p.get(0) >= 100){
count += 1;
if(p.size() == 1){
answer.add(count);
}
p.remove(0);
s.remove(0);
}else{ //100보다 작을 때
if(count != 0){
answer.add(count);
count = 0;
}
int tmp = (100-p.get(0))%s.get(0);
int days;
if(tmp == 0){
days = (100-p.get(0))/s.get(0);
}else{
days = (100-p.get(0))/s.get(0) + 1;
}
for(int i=0; i < p.size(); i++){
p.set(i, p.get(i)+s.get(i)*days);
}
}
}
return answer;
}
}
'공부 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 의상(python/java) (0) | 2023.06.26 |
---|---|
[프로그래머스] 네트워크(python/java) (0) | 2023.06.22 |
[프로그래머스] 전화번호 목록(python/java) (0) | 2023.06.22 |
[프로그래머스] 타겟 넘버(python/java) (0) | 2023.06.12 |
[프로그래머스] 모의고사(python/java) (0) | 2023.06.12 |
Comments