문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/42586
처음 접근 방법
100-progresses를 하면 남은 진도가 나오고, 이 값에서 speed를 나눠주면 몇 일 걸리는지 구할 수 있다.
각 기능마다 몇 일 걸리는지 배열에 저장해두고
배열의 이전 값과 현재 값을 비교하면서,
이전 값 >= 현재 값 이면 count+1 을 해주고,
이전 값 < 현재 값 이면 answer 배열에 count의 값을 넣어준다.
마지막으로 현재 count의 값을 answer 배열에 넣어주면 끝!
function solution(progresses, speeds) {
var answer = [];
let day = [];
for (let i = 0; i < progresses.length; i++) {
progresses[i] = 100 - progresses[i];
day[i] =
progresses[i] % speeds[i] == 0
? progresses[i] / speeds[i]
: Math.floor(progresses[i] / speeds[i]) + 1;
}
let count = 1;
for (let i = 1; i < day.length; i++) {
if (day[i - 1] < day[i]) {
answer.push(count);
count = 1;
}
if (day[i - 1] >= day[i]) {
count++;
}
}
answer.push(count);
return answer;
}
그렇게 해서 나온 코드,,
테스트 케이스 2개 통과하길래 모야 쉽네~ 했는데
그럼 그렇지
한 번에 통과할리가ㅠㅠ
뭔가 조금만 수정하면 될 것 같아서 코드를 계속해서 다시 읽어봤다.
두번째 접근 방법
바보.
풀이가 틀렸다....
이전 값과 현재 값을 비교하면 안되고
기준 값을 정하고, 그 값을 기준으로 봐야되는거였다ㅠㅠ
function solution(progresses, speeds) {
var answer = [];
let day = progresses.map((progresses,index) =>
Math.ceil((100-progresses)/speeds[index]));
let temp = day[0];
let count = 0;
day.forEach((element)=>{
if(temp >= element){
count++;
}
if(temp < element){
answer.push(count);
count=1;
temp=element;
}
})
answer.push(count);
return answer;
}
그렇게 해서 나온 코드~!
day 배열에 저장하는 것도 더 깔끔하게 고치고
이전 값이 아니라 기준 값을 정해서 비교하는 걸로 로직을 바꾸니 풀렸다.
생각보다 쉬운 문제여서 푸는게 오래 걸리진 않았다...!
for문 안쓰려고 노력중인데 쉽지 않네ㅠㅅㅠ
'Algorithm' 카테고리의 다른 글
[Programmers]게임 맵 최단거리/JS (1) | 2024.01.23 |
---|---|
[Programmers]구명보트/JS (2) | 2024.01.22 |
[Programmers]하노이의 탑(12946번)/JS (1) | 2024.01.21 |
[Programmers]할인 행사(131127번)/JS (2) | 2024.01.14 |
[Programmers]n^2 배열 자르기(87390번)/JS (1) | 2024.01.11 |