반응형
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
첫 번째 풀이
간단하게 생각했음.
function solution(progresses, speeds) {
let answer = [1];
const arr = progresses.map((progress,i) => Math.ceil((100-progress) / speeds[i]));
for(let i = 1; i < arr.length; i++) {
if(arr[i] <= arr[i-1]) answer[answer.length - 1] += 1;
else answer.push(1)
}
return answer;
}
- 남은 일수를 담은 배열 arr를 만들고,
- arr를 앞에서부터 보면서,
- 앞의 날이 현재 날보다 숫자가 크거나 같으면 answer의 마지막 인덱스의 값을 +1
- 앞의 날이 현재 날보다 숫자가 작으면 answer에 1을 push
- 2~4를 arr의 길이만큼 반복한다.
결과는 … 실패투성이
두 번째 풀이
어데가 잘못됐노 싶었는데,
3~4에서 잘못됐다. 앞의 날과 비교하는 게 아니라, 현재 answer 인덱스에 담은 날들 중에서 max인 값과 비교를 해야 한다.
그래서 변수 max를 추가하여 코드 수정했다.
function solution(progresses, speeds) {
let answer = [1];
const arr = progresses.map((progress,i) => Math.ceil((100-progress) / speeds[i]));
let max = arr[0];
for(let i = 1; i < arr.length; i++) {
if(arr[i] <= max) answer[answer.length - 1] += 1;
else {
max = arr[i]
answer.push(1);
}
}
return answer;
}
다른 사람 풀이 보니까 비슷하게 풀었더라
반응형
'CS > 알고리즘' 카테고리의 다른 글
[230423] 연속 부분 수열 합의 개수 (0) | 2023.04.23 |
---|---|
[230423] 명예의 전당 (1) | 2023.04.23 |
[230422] 소수 찾기 (0) | 2023.04.22 |
[230422] 추억 점수 (0) | 2023.04.22 |
[230422] 소수 찾기 (0) | 2023.04.21 |