-
[프로그래머스] 스택/큐 - 기능개발알고리즘 공부/문제 풀이 2020. 8. 10. 14:50
static int[] solution(int[] progresses, int[] speeds) { //정답 배열의 크기 알수 없으므로 ArrayList로 선언 ArrayList<Integer> list_answer = new ArrayList<Integer>(); int[] left=new int[progresses.length]; //남은 퍼센트 int[] days=new int[progresses.length]; //배포 가능일 수 //left,days 초기화 for(int i=0;i<progresses.length;i++) { left[i]=100-progresses[i]; int day=1; while(left[i]>speeds[i]*day) day++; days[i]=day; } int temp=0; for(int i=0;i<days.length;i++) { if(days[temp]<days[i]) { list_answer.add(i-temp); temp=i; } if(i==days.length-1) list_answer.add(days.length-temp); } //arraylist를 int 배열로 변환하여 답 출력 int[] answer = new int[list_answer.size()]; for (int i=0; i < answer.length; i++) { answer[i] = list_answer.get(i).intValue(); } return answer; }
정답 배열의 크기를 처음부터 초기화해 줄 수 없으므로
ArrayList로 정답 배열 선언해준 뒤, 마지막에 배열로 변환하여 정답을 출력하도록 하였다.
남은 퍼센트와 배포 가능일 수를 계산하여 값을 넣어놓은 left와 days 변수를 만들었고,
days를 활용하여 정답을 찾았다.
이전 기능이 배포되어야 하므로, 제일 첫 번째 기능이 배포될 때 함께 배포할 수 있는 기능의 수를 계산하여 값을 넣어줬다. 이때 기준 값은 첫번째 기능의 배포일이다.
이후 기준 값을 배포 불가능한 제일 앞 기능의 배포 일을 하여 계속해서 반복해나간다.
마지막 기능까지 가게 된 경우 배열의 길이를 이용하여 정답을 찾아주었다.
문제를 풀어보면서 왜 이 문제가 이 개념에 해당하는 문제인지 잘 모르겠다...
'알고리즘 공부 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 스택/큐 - 프린터 (1) 2020.08.11 [프로그래머스] 스택/큐 - 다리를 지나는 트럭 (1) 2020.08.11 [프로그래머스] 스택/큐 - 주식가격 (1) 2020.08.10 [프로그래머스] 정렬 - H-index (1) 2020.08.06 [프로그래머스] 정렬 - 가장 큰 수 (1) 2020.08.06