표 편집

// 노드 정의 풀이
import java.util.*;

class Solution {
    
    private static class Node {
        int index;
        Node prev, next;
        
        Node(int index) {
            this.index = index;
        }
    }
    
    public String solution(int n, int k, String[] cmd) {
        
        Node[] nodes = new Node[n];
        for (int i = 0; i < n; i++)
            nodes[i] = new Node(i);
        
        // 연결 설정
        for (int i = 1; i < n; i++) {
            nodes[i].prev = nodes[i -1];
            nodes[i - 1].next = nodes[i];
        }
        
        Node current = nodes[k];
        Stack<Node> stack = new Stack<>();
        
        for (String c : cmd) {
            char ch = c.charAt(0);
            if (ch == 'U') {
                int x = Integer.parseInt(c.substring(2));
                for (int i = 0; i < x; i++) current = current.prev;
            } else if (ch == 'D') {
                int x = Integer.parseInt(c.substring(2));
                for (int i = 0; i < x; i++) current = current.next;
            } else if (ch == 'C') {
                stack.push(current);
                if (current.prev != null) current.prev.next = current.next;
                if (current.next != null) current.next.prev = current.prev;
                current = (current.next != null) ? current.next : current.prev;
            } else if (ch == 'Z') {
                Node node = stack.pop();
                if (node.prev != null) node.prev.next = node;
                if (node.next != null) node.next.prev = node;
            }
        }
        
        // 삭제 정보 생성
        char[] result = new char[n];
        Arrays.fill(result, 'O');
        for (Node node : stack) {
            result[node.index] = 'X';
        }
        return new String(result);
    }
}

Last updated