[프로그래머스] 프린터(javascript)

프린이·2021년 6월 3일
1

  • 제 코드는 최선의 방안은 아닙니다.
  • 단순히 기록용, 공유용이니 이 점 보실 때, 참고바랍니다!

🔗 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/42587#

📙 나의 풀이 과정

📝 작성한 코드

function solution(priorities, location) {
    var answer =  [];
    //원소 값이 중복되면 indexOf로 원래 있던 위치 찾기 어려워
    //priorities가 나중에 위치 바꿀 때 원래 배열의 인덱스를 확인하려고 만든 배열
    var idxArr = priorities.map(function(a,i){
        return i;
    });

    while(true){
        //priorities의 최대값
        var bestPri = Math.max(...priorities);
        //priorities의 최대값
        var bestPriIdx = priorities.indexOf(bestPri);

        if(bestPriIdx != 0){
            priorities = priorities.slice(bestPriIdx, priorities.length).concat(priorities.slice(0, bestPriIdx));
            idxArr = idxArr.slice(bestPriIdx, idxArr.length).concat(idxArr.slice(0, bestPriIdx));
        }
        else{
	    // 최대값이 맨 앞에 있으니 프린트하고 원래 배열에서 제거
	    // 제거해야 이 값을 제외한 값들 중 또 최대값을 구할 수 있음)
            priorities.shift();
	    // 프린트 된 배열의 원래 자리 모아두는 곳에 값 추가함
	    // 위와 동일한 이유로 맨 앞 값 제거
            answer.push(idxArr.shift());
	    // 우리가 찾고 있는 위치가 answer배열에 존재하면 무한루프 멈춤
            if(answer.indexOf(location) != -1){
                break;
            }
        }
    }
    //몇 번째로 프린트 됐는지에 대한 값을 반환하기 위해 배열의 길이를 반환함
    return answer.length;
}
profile
주니어 프론트엔드개발자

0개의 댓글