기능 개발

Happhee·2022년 2월 5일
0

[ Lv2 ] programmers

목록 보기
16/32
post-thumbnail

📝 기능 개발

🖥 나의 JS코드

첫번째 시도

처음에는 단순 배열 계산으로 구현하였으나,
배열을 스택으로 생각하여 맨 앞의 수를 가져와 이를 다음수와 비교하면서 스택에서 빼낸 원소의 수를 계산하는 방법으로 문제를 해결하였다

// 작업 시행 시간 구하는 함수 작성
function day (progress, speed){
    let count = 0;
    while(progress < 100){
        count ++;
        progress += speed;
    }
    return count;
}


function solution(progresses, speeds) {
    let answer = [], result = [];
  // 각 작업에 대한 여분 시간을 구하여 배열에 담음
    for(let i = 0 ; i < progresses.length ; i++){
        result.push(day(progresses[i], speeds[i]));
    }
    
  // 작업한 일의 수를 초기화
    let task_count = 1;
    
  // 결과 스택에 일이 없어질 때까지 반복
    while(result.length != 0){
      // 일단 맨 앞의 작업 수행시간을 가져오고
        let task = result.shift();
      
      // 다음 수부터 현재 진행중인 작업의 진행 시간과 비교하여
      // 빼낼 작업의 수가 작거나 같으면 결과 스택에서 제거하고
      // 작업한 일의 수를 한개 증가 시켜준다
      // 만약 빼낼 작업의 진행시간이 현재 진행 중인 작업 시간보다 크다면
      // 다음 일로 넘겨야 하므로 while문 종료
        while(task >= result[0]){
            result.shift();
            task_count++;
        }
      
      // while문이 종료되고 나서의 진행된 작업의 수를 답 스택에 넣어주고
        answer.push(task_count);
      // 작업한 일의 수를 1로 초기화 한다
        task_count = 1;
    }
    return answer;
}

두번째 시도

함수와 스택을 따로 작성하지 않고 map과 배열을 통해 문제를 해결하였다

function solution(progresses, speeds) {
    let answer = [];

    // 나머지 작업 시간 담는 배열
    let restProgresses = progresses.map((progress, index) => {
        let count = 0;
        // 100전까지 날짜를 하나씩 증가
        while (progress < 100) {
            progress += speeds[index];
            count++;
        }
        return count;
    })
    // 처음 원소를 최대값으로 설정한후 반복문 수행
    let finsh = 1;
    let max = restProgresses[0];
    for (let i = 1; i < restProgresses.length; i++) {
        if (restProgresses[i] <= max)
            finsh++;
        else {
            // 최대값보다 오래걸리는 일이면 
            // 같은날에 배포가 불가능하므로
            // 답안에 작업한 일의 수를 넣어주고
            // 작업한 일과 최대값을 초기화 시켜준다
            answer.push(finsh)
            finsh = 1;
            max = restProgresses[i]
        }
    }
    // 마지막 작업 결과 넣어주고 반환
    answer.push(finsh)
    return answer;
}
profile
즐기면서 정확하게 나아가는 웹프론트엔드 개발자 https://happhee-dev.tistory.com/ 로 이전하였습니다

0개의 댓글