Poylib
기록형 프론트엔드
Poylib
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • Programing (38)
      • Javascript (17)
      • Typescript (1)
      • React (9)
      • React-Native (6)
      • Git (4)
      • Next (1)
    • Study (36)
      • Algorithm (35)
      • Etc. (1)
    • Record (17)
      • Memoirs (12)
      • Group (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 회고
  • 자바스크립트
  • 코딩테스트
  • 프로그래머스
  • react-native
  • react
  • 리액트
  • Error
  • 백준
  • 기초
  • typescript
  • Object
  • Git
  • 코칭스터디
  • ReactNative
  • vite
  • javascript

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Poylib

기록형 프론트엔드

[programmers / JavaScript] 기능 개발
Study/Algorithm

[programmers / JavaScript] 기능 개발

2022. 6. 22. 22:49
https://programmers.co.kr/learn/courses/30/lessons/42586


sol1

function solution(progresses, speeds) {
    let day = Array.from({length:speeds.length},()=>0);
    for(let i=0;i<speeds.length;i++) {
        while(progresses[i]<100) {
            progresses[i] +=speeds[i];
            day[i]++;
        }
    }
    
    
    let answer = [];
    let max = day[0];
    let count = 1;
    for(let i =1;i<day.length;i++){
        if(day[i]<=max) {
            count++;
        } else {
            max = day[i];
            answer.push(count);
            count = 1;
        }
    }
    
    
    answer.push(count);
    return answer;
}

1.

첫 번째 for문에서 100% 완성까지 걸리는 날짜를 담은 day 배열을 만들어 준다. for문에 있는 while에서 progresses [i]<=100으로 조건을 주면 답안 제출 시 11번 케이스만 틀렸다고 나온다. 진도와 속도 모두 자연수인데 어느 케이스에서 day 배열이 안 맞게 되는지는 알지 못했다..

// 첫번째 입력의 day 배열
[7,3,9]

//두번째 입력의 day 배열
[5,10,1,1,20,1]

 

2.

두 번째 for문에서 1시간 동안 헤맸던 부분은 return 위의 answer.push() 부분이다. 이 부분 없이 출력하면 return 되는 값에 마지막 요소가 없이 나온다.

// 만약 마지막 라인에서 answer.push() 를 하지 않는다면

//1번 입력의 경우 [2, 1] 이 나와야 하지만
[2]

//2번 입력의 경우 [1, 3, 2] 이 나와야 하지만
[1, 3]

//각각 마지막 요소가 빠진채로 return 된다.

else 부분을 보면 day 배열에서 탐색 중인 요소보다 다음 요소가 클 경우에만 answer 배열에 넘겨준다. 즉, 배열의 마지막에서 현재 요소보다 더 큰 값을 만나지 않기 때문에 count는 쌓아두지만 answer 배열에 넘어가지는 않는다. count가 초기화된 건 아니므로 for문 밖에서 마지막으로 count를 푸시해주면 된다. 내가 짠 로직인데도 흐름을 놓쳐서 다 만들어놓고 한참 시간을 허비했다.. 항상 조건을 잘 파악하고 배열의 마지막까지 돌아가는지 확인하자.

 

sol2

 let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
 
 //[7,3,9]
 //[5,10,1,1,20,1]

sol1에서 만들었던 day 배열은 이렇게도 만들 수 있다. 제일 처음 고려했던 계산이긴 했는데 소수를 올려주는 메서드가 기억이 안 나서:(

floor를 사용하는 빈도가 더 높다 보니 놓치고 있었던 것 같다.

저작자표시 비영리 변경금지 (새창열림)

'Study > Algorithm' 카테고리의 다른 글

[programmers / JavaScript] 큰 수 만들기  (0) 2022.06.25
[BEAKJOON / node.js] 17298 오큰수  (0) 2022.06.25
[BEAKJOON / node.js] 1302 베스트셀러  (0) 2022.06.21
[BEAKJOON / node.js] 1744 수 묶기  (0) 2022.06.17
[BEAKJOON / node.js] 12904 A와 B  (0) 2022.06.16
    'Study/Algorithm' 카테고리의 다른 글
    • [programmers / JavaScript] 큰 수 만들기
    • [BEAKJOON / node.js] 17298 오큰수
    • [BEAKJOON / node.js] 1302 베스트셀러
    • [BEAKJOON / node.js] 1744 수 묶기
    Poylib
    Poylib
    모시깽 기록

    티스토리툴바