기능개발 - 큐

원동휘·2022년 11월 20일
0

목록 보기
1/2

< 문제 >

풀이

  • 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
    라는 문구를 보고 queue방식임을 캐치할 수 있음.
    progresses, speeds가 서로 1대 1로 매칭된다는것을 이용
    얼마나 반복될지 모르니 while문을 사용해 반복하면서
    while문 내부에 for문으로 queue에 각 요소에 speeds를 더해줍니다.
    그리고 queue의 첫번째 요소가 100보다 크다면 count를 올려주고, 해당 queue의 역할은 끝났으므로 queue와 그와 매칭되는 speeds를 shift메소드를 이용해 제거해줍니다.
    그리고 count가 0보다 클때만 answer에 count를 push해 각 요소가 FIFO로 순서를 지키면서 count를 넣어주도록 한 풀이.
function solution(progresses, speeds) {
  let answer = [];
  let queue = progresses; // queue로 변수명 변경

  while (queue.length > 0) {
    let count = 0;
    for (let i = 0; i < queue.length; i++) {
      // 서로 짝 지어 더함.
      queue[i] += speeds[i];
    }

    // queue가 shift되면서 for문의 길이를 건드리기 때문에 for문과 shift문을 꼭 분리해야함
    while (queue[0] >= 100) {
      count++;
      queue.shift(); // queue의 마지막 요소 제거.
      speeds.shift(); // speeds의 마지막 요소 제거. 항상 짝지어진 speeds도 함께 제거해야함
    }

    if (count > 0) {
      answer.push(count);
    }
  }

  return answer;
}

console.log(solution([93, 30, 55], [1, 30, 5]));
console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));
profile
Front-End Developer #Nextjs #React #Typescript

0개의 댓글