프로그래머스, 기능개발(level 2)

껌뻑이·2021년 8월 31일
0

Programmers

목록 보기
6/6
post-thumbnail

프로그래머스, 기능개발

문제

개발 속도가 다른 기능의 개발이 있다.
배포는 하루에 한 번만 할 수 있다.
즉, 앞의 개발이 늦어지면 뒤의 개발이 아무리 빨라도 기다려야하고, 앞의 배포와 함께 배포가 된다.

입출력 예

progressesspeedsresult
[93,30,55][1,30,5][2,1]
[95, 90, 99, 99, 80, 99][1, 1, 1, 1, 1, 1][1,3,2]

나의 풀이

남은 일자 알기

먼저 배포까지 얼마나 남았는지 남은 확인하는 코드를 생성해 변수에 넣어 주었다.

const remainder = progresses.map((item, i) => Math.ceil((100 - item) / speeds[i]));

100에서 진행 중인 아이템을 빼고 그것을 진행 속도로 나누어서 올림해주었다.
그러면 며칠이 걸리는지 알 수 있다.

변수와 for문을 이용해서 앞의 개발의 걸리는 시간이 더 크면 뒤의 개발은 나오지 못하게 하였다.

남은 일자로 로직 짜기

let focus = remainder[0];
let result = [];
let count = 1;

for(let i = 1; i < remainder.length; i++) {
  if(remainder[i] <= focus) count += 1;
  else {
      result.push(count);
      focus = remainder[i];
      count = 1;
  }

  i === remainder.length -1 && result.push(count);
}

return result;

먼저 focus변수에 remainder[0]을 넣어주고 for문은 1부터 반복하게 설정했다.

그러고 반복문의 remainder이 focus보다 작거나 같으면 1로 초기화된 count에 1을 증가해 주고 다음으로 넘어간다.

만약 focus보다 크면 count를 result 배열에 넣어주고 focus를 본인으로 대입하고 count도 1로 바꾸어 주었다.

마지막 배열은 비교할 것이 없기 때문에 바로 count를 result에 넣어주었다.

그리고 result를 반환

최종 코드

const remainder = progresses.map((item, i) => Math.ceil((100 - item) / speeds[i]));
    
    let focus = remainder[0];
    let result = []
    let count = 1;
    
    for(let i = 1; i < remainder.length; i++) {
        if(remainder[i] <= focus) count += 1;
        else {
            result.push(count)
            focus = remainder[i]
            count = 1
        }
        
        i === remainder.length -1 && result.push(count)
    }
    return result

나의 문제점

처음에 테스트에서 통과를 못했는데 이유가 for문에서 focus가 비교 대상보다 작은 것만 생각했기 때문이다. 즉, 같은 것을 생각하지 못했다.

같으면 당일에 같이 배포가 되기 때문에 count를 증가해줘야 했다.

이점을 놓쳐서 이걸로 몇십분을 고생했다.😭ㅠㅠ

테스트 케이스 말고도 다른 테스트 케이스도 잘 생각해야 겠다!

0개의 댓글