프로그래머스 JS 기능개발

이명진·2022년 4월 5일
0

코드카타

목록 보기
18/69

문제 설명

기능개발을 하고 배포를 해야하는데. 배포는 한꺼번에 할수록 좋다.
각 기능들에대해서는 100%가 되면 배포가 가능한데 작업에 드는 공수는 작업마다 다르다.
배포는 그리고 순서대로 나갈수 있다. 작업 공수가 빨리되어도 앞에 작업이 완료가안되면 못나가고 앞에가 완료되었을때 다같이 나갈수 있다.
이렇게 해서 같은날 배포되는 배포건수들의 개수를 리턴하면 된다.

1차 풀이

단순하게 map을 사용하여 문제를 풀고자 했다.
각 개발들의 공수에 드는 시간들을 측정해서 그 시간들로 count개수를 측정해서 리턴 하는것..
방법은 복잡하지만 이방법도 맞는거 같다 라는 생각이 든다.
테스트는 마지막 문제 빼고 다 통과를 했다.

function solution(progresses,speeds){
  let bepo = [];
  progresses.map((x,i)=>{
    let count =0;
    while(x<=100){
      x=x+speeds[i]
      count++
    }
    bepo.push(count)
  })
  
  let finished= bepo[0];
  let answer =[];
   let count =0;
	bepo.map((x,i)=>{
  

           
    if(finished<x){
  
      answer.push(count)
      finished=x
      count=1
    }else if(finished>=x){
      count++ 
    }
    if(bepo.length-1===i){
      
      answer.push(count)
    }
  })
  return (answer)
}

2차 풀이

문제를 틀렸기도 해서 다시한번 마음을 새로먹고 풀어보도록 하였다.
스택과 큐 문제가 힌트인것 같아서 스택과 큐로 풀어보도록 노력하였다.

function solution(progresses,speeds){
  let bepo = [];
  progresses.map((x,i)=>{
    let finished = 100-x
    finished=Math.ceil(finished/speeds[i])
    bepo.push(finished)
  })
  
  let count =1;
  let answer =[];
  let time= bepo[0];
  for(let i=1;i<bepo.length+1;i++){
    	if(time>=bepo[i]){
        count++
      
      }else{
        
        answer.push(count)
        count=1;
        time=bepo[i];
      }

    
  }

  return answer
}

1차 보다는 코드를 줄이긴 했다.
그래도 방향성은 비슷하게 가져갔다. 공수 시간을 구한뒤에
공수시간을 비교하여서 cnt를 늘려주는 것.
스택으로 하나 담고 하나 빼주고 하려고 하면 배열에 한개더 필요한것 같아서
변수로 큰값을 바꿔주는 형식으로 문제를 풀게 되었다.

결과는 통과할수 있었다.

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글