우선 아래 과정을 return문 만날때까지 반복
1. priorities의 맨앞 요소 num으로 빼내고 location을 1 뺀다.
-> 빼낸 값과 maxValue값과 같고, location도 -1이라면 answer을 1 더해주고 return함
-> 그게 아니고, 빼낸값과 maxValue만 같다면 answer을 1 더해주고, 새로운 maxValue를 구함.
-> 모두 아니라면, 그 값을 뒤로 보냄.
function solution(priorities, location) {
var answer = 0;
var maxValue = Math.max(...priorities);
while(true){
var num = priorities.shift();
location--;
if(location===-1&&num===maxValue){
return ++answer;
}
//최댓값과 같다면
else if(num===maxValue){
answer++;
maxValue = Math.max(...priorities);
}
//최댓값이 아니라면 뒤로 이동
else{
priorities.push(num);
}
if(location===-1){
location = priorities.length-1;
}
}
}
이번 문제는 스택을 이용하여 어떻게 설계하느냐가 관건이었던 것 같다.
설계를 진행할때, A4용지를 가져와서 테스트 케이스를 넣어가며 위와 같은 알고리즘을 만들었다. 이렇게 차분히 테스트 케이스를 넣어가면서 알고리즘을 파악하는 것도 매우 좋은 방법인 것 같다.
이런 알고리즘만 침착하게 만들어낼 수 있다면 금방 풀어낼 수 있는 문제였다.
A4 까지 활용하시면서 해결하신 노력 정말 멋지십니다 👍