본문 바로가기

코테

[Programmers] 표편집 JS

반응형

링크드리스트처럼 풀었다

//U X x칸 위에 있는 행 선택
//D X x칸 밑에 있는 행 선택
//C 현재 행 삭제하고 바로 밑(가장 밑이면 그 위)
//Z 가장 최근에 삭제된 행 복구
function solution(n, k, cmd) {
    let answer = "";
    let left = [];
    let right = [];
    let stk = [];
    let arr = [];
    for(let i=0; i<=n+1; i++){
        right[i]=i+1;
        left[i]=i-1;
        arr[i] = true;
    }
    k++;
    for(let str of cmd){
        let tmp=str.split(' ');
        if(tmp[0]==='U'){
            for(let i=0; i<tmp[1]; i++){
                k = left[k];
                if(k===-1){
                    k = right[k];
                    break;
                }
            }
        }
        if(tmp[0]==='D'){
            for(let i=0; i<tmp[1]; i++){
                k = right[k];
                if(k===n+1){
                    k = left[k];
                    break;
                }
            }
        }
        if(tmp[0]==='C'){
            arr[k] = false;
            stk.push(k);
            right[left[k]] = right[k];
            left[right[k]] = left[k];
            k = right[k];
            if(k===n+1){
                k = left[k];
            }
        }
        if(tmp[0]==='Z'){
            let z = stk.pop();
            arr[z] = true;
            right[left[z]]=z;
            left[right[z]]=z;
        }
    }
    for(let i=1; i<=n; i++){
        if(arr[i])  answer+="O";
        else    answer+="X";
    }
    return answer;
}
반응형

'코테' 카테고리의 다른 글

[Programmers] 이중우선순위큐 JS  (0) 2022.01.21
[Programmers] 단어 변환 JS  (0) 2022.01.21
[Programmers] N으로 표현 JS  (0) 2022.01.20
[Programmers] N개의 최소공배수 JS  (0) 2022.01.20
[Programmers] 최솟값 만들기 JS  (0) 2022.01.20