본문 바로가기

Archived(CSE Programming)/알고리즘(Java)

프로그래머스 기능개발

문제 : https://programmers.co.kr/learn/courses/30/lessons/42586?language=java

 

코딩테스트 연습 - 기능개발 | 프로그래머스

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇

programmers.co.kr

기본적으로 큐를 이용하면 쉽게 해결할 수 있는 문제였다.

다만 ArrayList로 변경하는 과정이나 remove 등을 사용해야하는 Java의 문법이 익숙치 않았다.

ArrayList를 활용하는 방법과 remove 등의 문법에 익숙해지기!

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayList a = new ArrayList<Integer>();
            
        // ArrayList
        ArrayList p = new ArrayList<Integer>(progresses.length);
        ArrayList s = new ArrayList<Integer>(speeds.length);
        for(int e : progresses)
            p.add(Integer.valueOf(e));
        for(int e : speeds)
            s.add(Integer.valueOf(e));
        
        // 반복문
        while(p.size() != 0){
            int cnt = 0; // 배포 수
            
            // 하나씩 더하기
            for(int i=0; i< p.size(); i+=1)
                p.set(i, (int)p.get(i) + (int)s.get(i));
            
            // 100 넘는 것 처리
            while(p.size()!=0){
                if((int)p.get(0)>=100){
                    cnt+=1;
                    p.remove(0);
                    s.remove(0);
                }
                else
                    break;
            }
            
            // 0이 아니면 정답 추가
            if(cnt != 0) 
               a.add(cnt);
        }
        
        int[] answer = new int[a.size()];
        for(int i=0; i<a.size(); i++)
            answer[i]= (int)a.get(i);
        return answer;
    }
    void print(List al){
        for(Object e : al){
            System.out.println(e);
        }
    }
}