728x90
📍 프로그래머스 2단계 - 기능개발
⚡️ 나의 풀이
이 문제에서 제일 크게 거쳐야 하는 기능은 2가지로 나뉜다. 첫 번째는 progresses와 speeds 값을 이용해서 배포가 며칠이 소요되는지 구해야 하고, 두 번째는 배포 날짜를 모아둔 값에서 제일 처음부터 배포를 할 때 다음 값이 현재 배포 일 수보다 작으면 같이 배포되고, 더 크면 나중에 배포되는 cnt값을 구해야 한다. 내가 풀 때는 첫 번째까지는 무난하게 구했는데 두 번째 cnt를 구하는 방식이 좀처럼 떠오르지 않았다.
도저히 방법이 떠오르지 않아 다른 사람은 어떻게 풀었는지 봤는데, for문 안에 i, j를 동시에 선언하고 count를 한 게 너무 신기했다. 거기에 j는 전치연산자를 사용했는데, 전치연산자는 예를 들어 현재 j값이 1일 때 +1을 더하고 2인 상태에서 계산을 하는 방법이다. 이런 계산을 할 때 사용하는 방법을 알았으니 다음에 써먹으면 된다. 참고로 지금 코드가 아닌 이전 코드를 제출했을 때 테스트 케이스 2번에 실패했는데, 그 이유는 Math.ceil을 100-progress에만 감싸줘서 그렇다. 대신에 전체 Math.ceil((100-progress) / speeds[idx]))에 감싸주면 정답처리를 받을 수 있다.
progresses에map연산자를 사용해100-progress를speeds[idx]로 나눠주었다.map연산자에 파라미터는 첫 번째로value두 번째로idx가 오는 특징을 이용했다.- 초기
max값은contributeDays[0]으로 설정했다. 이렇게 해야 대소 비교가 정상적으로 가능하다. contributeDays에 반복문을 사용해 현재 값보다max가 더 크면 이전 값들까지 같이 배포한다. 반대의 경우에는max를 갱신시키고 해당일부터 배포한다. 이때j를 전치 연산자로 값을 늘려 새로answer에 1을 추가했다.
728x90
function solution(progresses, speeds){
let n = progresses.length;
let contributeDays = progresses.map((progress, idx) => Math.ceil((100-progress) / speeds[idx]));
let max = contributeDays[0];
let answer = [0];
for (let i=0, j=0; i<n; i++){
if (max >= contributeDays[i]) answer[j]++;
else{
max = contributeDays[i];
answer[++j] = 1;
}
}
return answer;
}반응형
'Algorithm > 프로그래머스(Programmers)' 카테고리의 다른 글
| [ 자바스크립트(JavaScript) ] 프로그래머스 level2 - 오픈채팅방 (0) | 2021.11.08 |
|---|---|
| [ 자바스크립트(JavaScript) ] 프로그래머스 level2 - 다리를 지나는 트럭 (0) | 2021.10.26 |
| [ 자바스크립트(JavaScript) ] 프로그래머스 level1 - 모의고사 (0) | 2021.10.21 |
| [ 자바스크립트(JavaScript) ] 프로그래머스 level2 - 프린터 (0) | 2021.10.19 |
| [ 자바스크립트(JavaScript) ] 프로그래머스 level2 - 짝지어 제거하기 (0) | 2021.10.18 |
댓글