Lv.2 기능개발

리프깅·2023년 8월 4일
0

프로그래머스 Lv.2

목록 보기
16/17

✔ 기능개발 문제 보기


💻 코드

function solution(progresses, speeds) {
    let day = []
    for(let i=0; i<progresses.length; i++) {
        let n = Math.ceil((100 - progresses[i]) / speeds[i])
        day.push(n)
    }
    
    let answer = []
    let n = 1; let maxDay = day[0]
    for(let i=1; i<=day.length; i++) {
        if(day[i] <= maxDay) { n++ }
        else {
            maxDay = day[i]
            answer.push(n)
            n = 1
        }
    }
    return answer
}

👀 설명

첫번째 for문은 작업이 완료되기 까지 걸리는 날짜를 구하여 day에 저장하는 반복문이다. 이때, n은 무조건 올림수여야 하기 때문에 ceil을 사용한다.

작업 완료까지 2.1일이 걸리는 경우 -> 배포는 3일째에 하기 때문

두번째 for문은 배포 날짜를 answer에 저장하는 반복문이다. n은 N일째에 배포되는 기능의 개수를 저장하고, maxDay는 앞선 날짜 중 배포까지 가장 오래 걸리는 날이다.(== 숫자가 가장 큼)

만약 day의 i값이 maxDay보다 작다면 즉, 기능 개발이 먼저 끝나면 n에 1을 더한다. 반대의 경우에는 maxDay를 i값으로 바꿔주고, 카운팅한 nanswer에 저장한다. 그리고 다시 카운팅 하기 위해 n을 1로 바꿔준다.


😎

처음 코드에서는

if(day[i] < maxDay)

라고 썼는데, 몇몇 케이스에서 실패가 나왔다. 그래서 반례로 [90, 90, 90, 90],[30, 1, 1, 1],[1, 3]를 추가해서 문제를 다시 풀었는데...
그냥 <를 <=로 수정하면 되는 부분이었다.;;

profile
대학교 마지막 학기 공부기록

0개의 댓글

관련 채용 정보