본문 바로가기

알고리즘

New Year Chaos Javascript로 풀기

728x90

/*

    지금은 설날이고 모든 사람들이 원더랜드 롤러코스터를 탄다.

    몇명의 사람들이 대기하고 있으며 각각의 사람들이 그들의 초기 위치를 설명하는 스티커가 있는 옷을 입고 있다.

    초기 위치는 1에서부터 n으로 앞에서 뒤까지 정해진다.

    어떤 사람은 앞사람에게 직접 뇌물을 줘서 위치를 변경 할 수 있다.

    만약 두 사람이 위치를 변경하면 여전히 그들은 이전에 그들의 위치 스티커를 입는다.

    한 사람이 최대 다른 두사람과 위치를 변경할 수 있다.

    예를들어 n이 8이고 5번이 4번에게 뇌물을 주면 대기줄은 1,2,3,5,4,6,7,8로 보인다.

    매력적인 혼란스러운 대기줄을 현재 상태로 만들기 위해 필요한 최소 뇌물을 구하라

    이전에 뇌물받거나 준 사람이 또 받을 수 있다.

    

    앞에서부터 계산을 조지면 될 것 같다.

    

    shift 하면서 splice로 처리하면 간단할 것 같아서 했는데, 일부 케이스가 시간제한에 걸린다.

    splice가 문제인가?

 

    우선 shift는 굳이 필요없는 로직이다.

    shift하는 로직을 빼고 넣어본다.

 

    빼도 똑같음. indexOf문제로 보임.

    indexOf를 뺐더니 해결됨.

    알고리즘 문제를 풀때 indexOf를 써야하는 상황이 온다면 되도록이면 빼자.

*/

var arr = [21534]

 

function solution(q){

    var arr = q

    var arr2=[];

    for(var i=1;i<=arr.length;i++){

        arr2.push(i);

    }

    var sum = 0;

    for(var i=0;i<arr.length;i++){

        if(arr2[i]==arr[i]){

            arr[i]=-1;

            arr2[i]=-1;

        }else {

            var res = -1

            debugger

            if(arr2[i+1]==arr[i])

                res = 1;

            else if(arr2[i+2]==arr[i]){

                res = 2;

            }

            if(res == -1){

                console.log("Too chaotic")   

                return "Chaos";

            }

            arr2.splice(res+i,1);

            arr2.unshift(-1);

            arr[i]=-1;

            sum +=res;

        }

    } 

    console.log(sum)   

    return sum;

}

solution(arr);

 

728x90