-
[Algorithm] 프로그래머스 - 기능개발 (스택, 큐 - Stack, queue )Alogorithm 2020. 6. 4. 19:46반응형
프로그래머스 문제입니다.
문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한사항
- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
입출력
입출력 설명
예제 #1
첫 번째 기능은 93% 완료되어 있고 하루에 1%씩 작업이 가능하므로 7일간 작업 후 배포가 가능합니다.
두 번째 기능은 30%가 완료되어 있고 하루에 30%씩 작업이 가능하므로 3일간 작업 후 배포가 가능합니다. 하지만 이전 첫 번째 기능이 아직 완성된 상태가 아니기 때문에 첫 번째 기능이 배포되는 7일째 배포됩니다.
세 번째 기능은 55%가 완료되어 있고 하루에 5%씩 작업이 가능하므로 9일간 작업 후 배포가 가능합니다.따라서 7일째에 2개의 기능, 9일째에 1개의 기능이 배포됩니다.
문제풀이
function solution(progresses, speeds) { let answer = [] // (1) let workingDays = progresses.map((progress, idx) => Math.ceil((100 - progress)/speeds[idx])) // (2) let count = 1 let max = workingDays[0] for (let i = 1; i < workingDays.length; i++) { // (3) if (workingDays[i] <= max) { count++ } else { answer.push(count) max = workingDays[i] count = 1 } // (4) if(i === workingDays.length - 1) answer.push(count) } return answer }
idea: working days 배열과 max day 기준으로 값을 업데이트
(1) 100(완성)에서 progress(진행도)를 뺀 것을 speeds(속도)로 나눕니다. 그리고 올림한 값을 매핑합니다.
(2) 첫번째 열은 비교할 대상이 없기 때문에 1로 그리고 Max 값을 첫째 인덱스 기준으로 세팅합니다.
(3) if: 소요일이 max보다 작거나 같으면 같은 배포주기이기 때문에, 개수를 늘려줍니다.
else: 그렇지 않다면 count값을 push해줌으로써 배포주기를 끝냅니다.
그 후, max 값과 count를 다시 초기화해줍니다.
(4) 마지막 인덱스일 때, 비교해줄 일이 없기 때문에 마지막 개수를 푸시해줍니다.
그리고 return!
다른 분들 풀이를 참고해보면 접근은 비슷하나 for loop를 어떻게 활용하느냐에 따라서 조금 더 가독성이 좋은 코드가 되었다.
function solution(progresses, speeds) { let answer = [0]; let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index])); let maxDay = days[0]; for(let i = 0, j = 0; i< days.length; i++){ if(days[i] <= maxDay) { answer[j] += 1; } else { maxDay = days[i]; answer[++j] = 1; } } return answer; }
반응형'Alogorithm' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 이중우선순위큐 (힙 - Heap ) (0) 2020.06.04 [Algorithm] 프로그래머스 - 타일 장식물 (동적계획법 - Dynamic Programming ) (0) 2020.06.04 [Algorithm] 프로그래머스 - 예산 (이분탐색) (0) 2020.05.29 [Algorithm] 프로그래머스 - 여행경로 (bfs || dfs - 너비 || 깊이 우선탐색) (0) 2020.05.29 [Algorithm] 프로그래머스 - 네트워크 ( dfs - 깊이 우선탐색) (0) 2020.05.28