Programmers - 스택/큐 > 기능개발
10039 단어 queuestackprogrammersprogrammers
내 풀이
문제를 보이는 그대로 풀었다. 추가적으로 쉽게 풀 수 있는 방법을 생각하진 않았다.
- progresses, speeds 배열을 뒤집는다.
- progresses[i] += speeds[i]
- progresses 맨 끝 원소가 100 미만일 때까지 pop하고 cnt++
3-1. temp에 pop값 넣어서 100이상이면 pop & cnt++
3-2. 아니면 cnt = 0 & 과정 2부터 반복 - progresses 배열이 비어있으면 마무리
function solution(progresses, speeds) {
// 과정 1
let reProgresses = progresses.reverse();
let reSpeeds = speeds.reverse();
let cnt = 0;
let answer = [];
while (true) {
// 과정 2
if (reProgresses[reProgresses.length - 1] < 100) {
reProgresses = reProgresses.map(
(progress, index) => (progress += reSpeeds[index])
);
} else {
while (true) {
// 과정 3
if (reProgresses.length !== 0) {
reProgresses.pop();
cnt++;
if (reProgresses[reProgresses.length - 1] < 100) {
answer.push(cnt);
cnt = 0;
break;
}
} else {
answer.push(cnt);
return answer;
}
}
}
}
}
모범 답안
있는 그대로 푼 내 방법과는 다르게 기준 값 100까지 남은 일수를 배열에 집어넣어 풀었다.
남은 일수만 가지고 문제에 접근하니 신경 쓸 경우가 줄어들고 코드가 훨씬 간단해졌다.
또한, 문제를 보다 논리적으로 접근하였다.
- 남은 일과에 하루당 작업 효율을 나눈다.
- 남은 일수와 기준되는 maxDay값을 비교하여 answer에 동시 반영되는 기능의 수를 적용한다.
2-1. day[i]가 maxDay보다 크지 않으면 answer[i]++
2-2. day[i]가 maxDay보다 크면 day[i]를 maxDay값으로 대체 후 다음 answer에 1 삽입
function solution(progresses, speeds) {
let answer = [0];
// 과정 1
let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
let maxDay = days[0];
//과정 2
for(let i = 0, j = 0; i< days.length; i++){
if(days[i] <= maxDay) {
answer[j] += 1;
} else {
maxDay = days[i];
answer[++j] = 1;
}
}
return answer;
}
얻어갈 부분
- answer에서 원하는 내용이 무엇인지 계속 인지한다.
- 되도록 시간이 오래 걸리지 않는 선에서 논리적으로 문제를 접근해본다.
Author And Source
이 문제에 관하여(Programmers - 스택/큐 > 기능개발), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@singco/Programmers-스택큐-기능개발저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)