seunghyun Note
[프로그래머스] 기능개발(스택 공부 부수기) with JS 본문
728x90
반응형
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42586
문제 풀이
스택과 큐유형이어서
어려울 거 같아서 걱정했지만 로직만 이해하면 간단했다.
O(n^2)이 되고 싶지 않아 최대한 O(n)이 될 수 있는 방법을 생각했다.
그래서 표를 그리면서 언제 push를 할까...? 고민을 많이 했다.
안 좋은 코드라고 생각했지만 그래도 다른 사람들의 코드와 비교했을 때 깔끔했던 거 같다.
📌 새로운 배열을 정의해야 한다.
1-1 progresses
배열은 작업속도이다. 작업속도는 100%가 되야한다.
그래서 남은 작업일을 구하기 전에 100% - progresses
값을 구해야 한다.
1-2 speeds
배열을 100%-progress
에 나눠서 새로운 배열을 정의해야 한다
progresses | speed | array |
[95,90,99,99,80,99] | [1,1,1,1,1,1] | (100- progresses) / speed |
📌 정의된 arr를 순회시켜 조건에 따라 arr.push(cnt)를 한다.
max를 처음에 arr [0]으로 할당하고 index 1~arr.length-1까지 비교해 준다.
function solution(progresses, speeds) {
var answer = [];
//arr를 만들어줘야한다. 조건은 위 글을 참고
let arr = progresses.map((x, y) => Math.ceil((100 - x) / speeds[y]));
//console.log(arr);
//cnt를 1로 초기화
let cnt = 1;
let max = arr[0]; //max를 0번째 인덱스 값으로 설정하기
for (let i = 1; i < arr.length; i++) {
//max보다 크다면 바로 push를 해주고 max를 바꿔준다.
if (arr[i] > max) {
answer.push(cnt);
max = arr[i];
cnt = 1;
} else {
cnt++;
}
//console.log(arr[i], cnt, max);
}
//배열의 순회가 끝났다면 마지막 값을 위해 push해서 마무리
answer.push(cnt);
return answer;
}
console.log(solution([93, 30, 55], [1, 30, 5]));
console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));
마지막으로 중간중간 console을 띄워서 해결하기!! (필수)
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[백준] 10773 : 제로 (스택 공부 부수기) with JS (1) | 2024.01.18 |
---|---|
[백준] 28278번 : 스택 2 (스택 공부 부수기) with JS (0) | 2024.01.18 |
[프로그래머스] 전화번호 목록 (해시) with JS (0) | 2024.01.17 |
[백준] 2941번 :크로아티아 알파벳 with JS (0) | 2024.01.16 |
[백준] 10988번 : 팰린드롬인지 확인하기 with JS (0) | 2024.01.16 |