본문 바로가기
프로그래밍 문제/프로그래머스

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

by 테크케찰 2020. 9. 17.

programmers.co.kr/learn/courses/30/lessons/42586

 

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

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

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
	    Stack<Integer> stack=new Stack<>();
	    for(int i=progresses.length-1;i>=0;i--) {
	    	float temp=(float)(100-progresses[i])/(float)speeds[i];
	    	stack.add((int)Math.ceil(temp));
	    }
	    ArrayList<Integer> list=new ArrayList<>();
	    int tempSum=1;
	    int tempNum=stack.pop();
	    while(true) {
	    	if(stack.isEmpty()) {
	    		list.add(tempSum);
	    		break;
	    	}
	    	if(stack.peek()<=tempNum) {
	    		tempSum++;
	    		stack.pop();
	    	}
	    	else {
	    		list.add(tempSum);
	    		tempSum=1;
	    		tempNum=stack.pop();
	    	}
	    }
	    int[] answer= new int[list.size()];
	    for(int i=0;i<list.size();i++) {
	    	answer[i]=list.get(i);
	    }
	    return answer;
    }
}

먼저 스택에 거꾸로 된 순서로 값을 저장할 건데요, 기능이 100%될 때까지 걸리는 일수를 저장할 겁니다.

이 때 Math.ceil을 이용해서 값을 올림해주어야 합니다.

tempNum이란 변수에 stack의 최상단 값을 저장합니다.

반복문을 이용해 tempNum보다 남은 일수가 큰 날이 나올 때까지 반복문을 실행하는데요, 남은 일수가 작거나 같은 날이 나오면 list에 값을 저장하고 새로운 값을 tempNum에 저장합니다. 

이 때 tempSum이라는 변수를 이용해 tempNum보다 남은 일수가 큰 날이 나오는 경우 +1을 해줌으로써 출시되는 기능의 개수를 저장합니다.