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 |
댓글