문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42586
1. 나의 풀이
처음에 문제를 읽을 때는 조금 막막했었다. 도대체 뭘 하라는거지?
- progressses 배열과 speeds 배열이 있다.
- 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수는 있는데
- 그러면 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 같이 배포된다.
그래서 나는 어떻게 했냐면,
- 100에서 progesses를 뺀 left_progresses 변수를 만들었다.
- left_progresses를 speeds로 나눈 값(이 때 올림을 해야한다(ceil 사용))을 새로운 배열에 push 한다.
- 값들이 들어간 배열(days)를 순회하는데 가장 앞에 있는 index의 값을 변수 standard에 저장하고, 뒤의 배열 값들이 standard보다 큰 값이 나올때까지 순회를 하면서 cnt 값을 1씩 더해준다.
- standard보다 큰 값이 나오면 순회를 멈추고, cnt 값을 새로운 배열(answer)에 push한다.
- standard보다 큰 값을 다시 변수 standard에 저장하고(cnt도 0으로 초기화), 3~4번을 반복한다.
- answer 배열을 return한다.
// 배열 days를 순회하면서
// 현재 배열값(standard)보다 뒤에 있는 값들이 작거나 같으면 cnt를 더해준다.
// 더 큰 값이 나오면 순회를 멈추고 카운트 된 cnt를 answer에 push해준다.
// 그리고 answer 배열을 return한다.
for(var i = 0; i < days.length;) {
let cnt = 1;
let standard = days[i];
i++;
while(standard >= days[i]) {
cnt++;
i++;
}
answer.push(cnt);
}
return answer;
}
다행히 정답이었다!!
2. 다른 사람의 풀이
function solution(progresses, speeds) {
var answer = [];
while(speeds.length > 0) {
// 개발
for(let i in speeds) {
if(progresses[i] < 100) {
progresses[i] += speeds[i];
}
}
// 배포
let deploy_count = 0;
while(progresses[0] >= 100) {
progresses.shift();
speeds.shift();
deploy_count++;
}
if(deploy_count > 0) {
answer.push(deploy_count);
}
}
return answer;
}
- progresses[i]가 100이 넘기 전까지 speeds[i]를 더 해준다.
- progresses[0]이 100 이상이 되면 progresses[0]과 speeds[0]을 빼주고(shift), deploy_count를 1 더해준다.
- progresses[1]이었던 것이 progresses[0]이 되어 2번을 다시 반복한다.
- progresses[i]가 100이 넘었던 것들을 빼고 나면 deploy_count를 answer 배열에 push 한다.
- 1-3번 과정을 speeds 배열이 텅 빌 때까지 반복한다.
위 코드가 가독성이 더 좋은 것 같다. 개발과 배포가 언제 어떻게 이뤄지는지 알아보기 쉽다.
그리고 shift를 이번에 처음 알게 되었는데 → 배열에서 첫 번째 요소를 제거하고, 제거된 요소를 반환
이것도 알아두면 유용히 써먹을 것 같다.
'Programmers(JavaScript)' 카테고리의 다른 글
[프로그래머스 자바스크립트] ‘구명보트’ 풀어보기 (0) | 2024.08.07 |
---|---|
[프로그래머스 자바스크립트] ‘체육복’ 풀어보기 (0) | 2024.08.07 |
[프로그래머스 자바스크립트] ‘같은 숫자는 싫어’ 풀어보기 (3) | 2024.07.17 |
[프로그래머스 자바스크립트] '완주하지 못한 선수' 풀어보기 (0) | 2024.07.17 |
[프로그래머스 자바스크립트] '폰켓몬' 풀어보기 (2) | 2024.07.16 |