본문 바로가기

알고리즘 문제풀이/프로그래머스

[프로그래머스][JAVA] 기능개발

문제 출처 :  https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

 

 

문제

 

설명

 

길이가 가변적으로 변하는 LinkedList 자료구조를 사용했습니다. 맨 처음에 있는 값이 배포 가능해질 때가지 수를 빼 주다가, 배포가 가능해 지면 linkedlist에서 맨 앞 원소 포함해서 배포 가능한 다른 원소까지 다 제거시키면서 일수를 더해주는 방식으로 구현했습니다!

 

 

코드

 

import java.util.Arrays;
import java.util.LinkedList;

public class PRO_FunctionDev {

	public static int[] solution(int[] progresses, int[] speeds) {
		
		LinkedList<Integer> p = new LinkedList<>();
		LinkedList<Integer> s = new LinkedList<>();
		LinkedList<Integer> result = new LinkedList<>(); //결과값을 담는 리스트
		
		for(int i=0; i<progresses.length; i++) {
			p.add(progresses[i]);
			s.add(speeds[i]);
		} //linkedlist에 옮겨 담음
		
		
		int cnt=0;
		while(!p.isEmpty()) {
			if(p.get(0)<100) {
				for(int i=0; i<p.size(); i++) {
					p.set(i, p.get(i)+s.get(i));
				}
			}//맨 처음 값이 100 이상이 될때까지 시간에 따라 모든 값에 작업속도 값을 더함
			else { //맨 처음값이 배포 가능하다면
				
				while(p.size()!=0 && p.get(0)>=100) { 
						p.remove(0);
						s.remove(0);
						cnt++;
					
				}//뒤에 있는 값도 이미 100이 넘었다면, 한꺼번에 배포 가능하므로.
				result.add(cnt);
				cnt=0; //초기화 필요
			}
		}
		
		int[] answer = new int[result.size()];
		for(int i=0; i<answer.length; i++)
			answer[i]=result.get(i);
		
		return answer;
	}
}