알고리즘

프로그래머스 - 프로세스 (Javascript) 풀이

jaewoo 2024. 6. 12. 20:50

 

풀이

1. 배열에 index를 부여해야한다. 예를들어 기존 배열 index로보면 0이 첫번째 1이 두번쨰... 이런식으로 가지만 해당 문제에서는 만약 큰 수가 존재하면 다시 넣어야 한다는 가정이 있다. 만약 0번째 index에 있는 데이터를 다시 넣게 된다면 0번 index 에서 arr.length-1 값이 되어 버린다. 그렇다면 location 인자로 주어지는 값은 다른 값을 가르키게 되는 것이다.

 

2. 먼저 map을 통해 숫자 배열을 객체배열로 변경하면서 fixIndex 프로퍼티를 추가한다.

 

3. while(true) 를 통해 실행하고, 배열에 첫번째 있는 값을 뽑아서 그 값이 가장 큰지를 체크하고 가장 크지 않으면 첫번쨰 있던 값을 맨뒤로 보낸다. 객체 배열이기때문에 처음에 부여한 인덱스는 fixIndex 프로퍼티로 값을 보존할 수 있다.

 

4. 그렇게 값비교를 하면서 가장 큰 값을 찾고 그 다음부터 fixIndex와 인자로 주어진 location이 같은 순서를 반복해서 찾은 뒤 return 하면 정답이다.

 

function solution(priorities, location) {
    const list = priorities.map((data, index) => {
       return {
        fixIndex: index,
        num: data
       }
    });
    
    let count =0;
    
    while(true){
        const current = list.splice(0,1)[0];
        
        if(list.some(e => e.num > current.num)){
            list.push(current);
        }else{
            count++;
            if(current.fixIndex === location) return count;
        }
    }
}