새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/JavaScript

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

by 언호 2022. 5. 4.

📖 문제


🧑🏻‍💻 풀이 과정

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 

 

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

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

programmers.co.kr

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

댓글