02-07 01:31
Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
관리 메뉴

기록을 합시다.

[프로그래머스] 기능개발(python/java) 본문

공부/알고리즘

[프로그래머스] 기능개발(python/java)

울집고양이세마리 2023. 6. 22. 03:30

문제 요약

  • 모든 기능들은 매일 개발 하되, 맨 앞의 일들이 개발 완료된 후에야 뒤에 완료된 연속된 일들도 동시에 배포한다.
  • 한 번 배포할 때, 몇 개의 기능들을 배포하게 되는지 구하라.

내가 생각한 로직

  • 첫 번째 기능의 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;
    }
}
Comments