# [2023.02.28] PGS_LV2_42586_기능개발
https://school.programmers.co.kr/learn/courses/30/lessons/42586
<접근법>
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 스택과 큐를 활용하는 대표 유형이다.
- 처음에 answer 배열에 현재 진행정도(progresses)에서 speeds와의 수식 관계를 처리하면서 k을 answer에 넣는다.
- (100-num) + speed * k >= 100
- k = Math.ceil((100-num) / (speeds[idx])) // 소수점 올림 처리 필수 (js)
- 그 후 answer(큐, 스택)에서 하나씩 값을 꺼내면서 첫 배포 시점하고 값을 비교하여 배포 개수를 구한다
- (주의) 처음에는 이전 값하고만 비교하는 줄 았았는데 배포되는 시점하고 (새로운 값을) 비교해야한다.
- [1번 8번 11번만 맞는다면 히든 테케를 이용해보세요]
- progresses : [93, 30, 55, 60, 40, 65]
- speeds : [1, 30, 5, 10, 60, 7]
- return : [2, 4]
/**
* 메모리 : 5.57 KB
* 시간 : 33.7ms
*/
function solution(progresses, speeds) {
let answer = [];
progresses.map((num, idx) => {
//(100-num) + speed * k >= 100
k = Math.ceil((100-num) / (speeds[idx])) // 소수점 올림 처리 필수 (js)
answer.push(k); // 걸리는 시간
})
let stack = []; // 스택용
let idx = 0; // 인덱스
let count = []; // 최종 배포 count
// stack
while(answer.length !== 0){ // 위에서 구한 배열이 비어있지 않으면
let cur = answer.shift(); // peak 꼭대기 값 확인 및 제거가 필수!
if(stack.length === 0 || stack[0] >= cur){ // ***(중요) stack의 첫 배포 시점하고 새로운 값을 비교!(그 이전 값과 비교x)
stack.push(cur) // 현재 값 스택에 넣기
}else { // 현재 값이 이전 값보다 크다면
count.push(stack.length); // 기존의 스택의 길이만큼 최종 배포 개수 배열에 push
stack = []; // 기존 값 전부 출력(초기화)
stack.push(cur); // 현재 값은 스택에 넣기
}
}
count.push(stack.length); // 마지막 스택의 길이는 최종 배포 개수 배열에 push
return count;
}
'JavaScript > 알고리즘(JS)' 카테고리의 다른 글
[프로그래머스 레벨3] 베스트 앨범 [Javascript/해쉬, 객체] (0) | 2023.03.04 |
---|---|
[ALGO#07] 프로그래머스 레벨2 귤 고르기 [Javascript] (0) | 2023.03.01 |
[ALGO#05] 프로그래머스 레벨0 배열 두배 만들기 [Javascript] (0) | 2023.02.01 |
[ALGO#03] 프로그래머스 레벨0 몫 구하기 [Javascript] (0) | 2023.02.01 |
[ALGO#02] 프로그래머스 레벨0 가장 큰 수 찾기 [Javascript] (0) | 2023.02.01 |