📖 문제
🧑🏻💻 풀이 과정
1) 문제 접근 및 이해
가장 앞에 있는 작업이 종료 되어야 이후 작업들도 순서대로 배포가 가능하므로, shift 를 이용하였습니다.
shift 를 이용하여 앞의 작업부터 순서대로 확인을 하며 진행 시키고, 작업 진행도를 추가시킨 후 push 를 이용하여 뒤에 추가하는 방식을 이용하였습니다.
2) 알고리즘
- 큐
3) 풀이 코드
사용 언어 - JavaScript
function solution(progresses, speeds) {
let answer = [] // 정답 배열
let taskIdx = 0 // 가장 앞에 있는 작업의 인덱스
let progress = progresses.map((v, i) => [v, i]) // 프로세스 내역들을 인덱스와 함께 저장
while (progress.length > 0) { // 프로세스가 남아있다면
task = progress.shift() // 앞에서부터 현재 작업을 꺼냄
if (taskIdx === task[1] && task[0] >= 100) { // 현재 작업이 가장 앞에 있는 작업이고, 작업이 완료 됬다면
cnt = 1 // 배포 되어야 하는 작업의 개수, 현재 작업 배포 되므로 초기값 1
while (progress.length > 0) { // 이후 작업들이 남아있다면
nextTask = progress.shift() // 그 다음 가장 앞에 작업 꺼내기
if (nextTask[0] < 100) { // 작업이 다 끝나지 않았다면
progress.unshift(nextTask) // 앞으로 다시 붙임
taskIdx = nextTask[1] // 가장 앞에 있는 작업의 인덱스 번호 갱신
break
}
cnt++ // 개수 증가
}
answer.push(cnt) // 정답에 추가
} else { // 현재 작업이 가장 앞에 있는것이 아니거나 작업이 진행중이면
task[0] += speeds[task[1]] // 작업 진행시키고, 뒤에 추가
progress.push([task[0], task[1]])
}
}
return answer
}
🔗 문제 링크
- https://programmers.co.kr/learn/courses/30/lessons/42586?language=javascript
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > JavaScript' 카테고리의 다른 글
[프로그래머스] 단어 변환 (0) | 2022.05.13 |
---|---|
[프로그래머스] 짝지어 제거하기 (0) | 2022.05.09 |
[프로그래머스] 네트워크 (0) | 2022.05.05 |
[프로그래머스] 타겟 넘버 (0) | 2022.05.05 |
[프로그래머스] 오픈채팅방 (0) | 2022.05.05 |
댓글