on
프로그래머스 스택/큐 문제 기능개발 (java,javascript)
프로그래머스 스택/큐 문제 기능개발 (java,javascript)
1. 기능개발
-- 문제 --
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한사항 중 하나
: 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발
속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
= 테스트 케이스 = [progresses, speeds, return ]
[93, 30, 55] [1, 30, 5] [2, 1] [95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1, 1] [1, 3, 2]
- 문제 풀이 -
1) progresses 의 값이 100이 되기 위한 값을 구한다. ( 100 - progresses의 값 ) / speeds
-- 여기서 계산값을 반올림 하는것이 아니라 무조건 올림하는 것이 핵심
-- 2.1이 나왔어도 이건 2일이 아니라 3일이기 때문
2) 값을 앞에서 부터 하나씩 빼주면서 비교 하면서 return 값을 만들어 가면 된다.
-- java --
import java.util.ArrayList; class Solution { public int[] solution(int[] progresses, int[] speeds) { ArrayList pro = new ArrayList(); ArrayList result = new ArrayList(); int i = 0; for(Integer v : progresses){ int value = (int) Math.ceil((double) (100 - v) / speeds[i]); pro.add(value); i++; } int temp = pro.remove(0); int num = 1; i = 0; for(; i < pro.size() ;){ if(temp >= pro.get(i)){ num ++; pro.remove(i); }else{ result.add(num); num = 1; temp = pro.remove(i); } if(pro.size() <= 0){ result.add(num); } } int[] answer = new int[result.size()]; for(; i < answer.length ; i++){ answer[i] = result.get(i); } return answer; } }
-- javascript --
function solution(progresses, speeds) { var answer = []; const pro = progresses.map((a,i) => Math.ceil((100-a)/speeds[i])); let temp = pro.shift(); let num = 1; for(let i = 0; i< pro.length ;){ if(temp >= pro[i]){ num ++; pro.shift(); }else{ answer.push(num); num = 1; temp = pro.shift(); } if(pro.length <= 0){ answer.push(num); } } return answer; }
아직 공부 단계라 많이 부족합니다. 지적은 환영입니다.
from http://healthyhabit.tistory.com/24 by ccl(A) rewrite - 2021-09-25 23:26:51