프로그래머스 - 기능개발

이윤주·2020년 5월 1일

코딩테스트

목록 보기
5/18

작업 a b c d e f 가 있다고 가정 :
1) a 완료시 e f 완료됨, 나머지 미완료시 : 그럼 a만 배포 (e f 는 d 가 배포될때 까지 배포 안됨)
2) a 완료시 b c d f 완료됨, 나머지 미완료시 : 그럼 a b c d 만 배포 (작업 순서 기준 연속배포 가능, 그러나 f 는 e미완료로 배포안됨)

중간에 미완성이 껴있으면 그 뒤로 완성이여도 함께 배포 못함.
조건부 순차적 연속배포 가능.

solution([40, 93, 30, 55, 60, 65],
[60, 1, 30, 5, 10, 7])

1일차 : 0 idx 완료 ==> 0 idx 배포
4일차 : 2 idx, 4 idx 완료 ==> but, 1 idx 배포안돼서 2idx 배포 x / 2, 3 idx 안돼서 4 idx 배포 x
5일차 : 5 idx 완료 ==> but 2, 3, 4 안돼서 배포 x
7일차 : 1 idx 완료 ==> 1 idx,2 idx 배포 완료
9일차 : 3 idx 완료 => 3,4,5 배포 완료

결과
: [1, 2, 3]

function solution(progresses, speeds) {
    var answer = [];
    
    while (progresses.length !== 0) {
        let count = 0 // 결과값 출력할 count
        
        progresses = progresses.map((curr, idx) => { // 진도율을 더해준다
          return curr + speeds[idx]
        }) 
        
        if(progresses[0] >= 100) { // 만약 0번째 idx가 100이넘으면 바로 출력 후 출력되는 것들은 제거
            progresses.shift()
            speeds.shift()
            count++
            
            for(let i = 0; i < progresses.length; i++) {
                if(progresses[i] >= 100) { // i번째 progresses가 100넘으면 count
                    count++
                    if(progresses[i + 1] < 100 || typeof progresses[i + 1] === "undefined") { 
                      // i번째 progresses가 100넘고, 그 다음 숫자가 100이 넘지 않거나 값이 없으면 그 뒤에 idx들도 출력이 되지 않기때문에 출력된 i번째까지 제거해주고 break;
                        progresses = progresses.slice(i+1)
                        speeds = speeds.slice(i+1)
                        break;
                    }
                } else { // i번째가 100이 넘지않아도 출력되지 않으니 break;
                    break;
                } 
            }
        }   
        
        if(count !== 0) {
            answer.push(count)
        }      
    }
        
    return answer;    
}

초반에 객체로 만들어서 100이 넘는지 안 넘는지 비교했었는데({vlaue : 120, sucess : true}) 그럴 필요 없이 progresses의 값으로만 비교하면 됐었다..

0개의 댓글