Algorithm
프로그래머스
Java
표 편집

표 편집

문제 Link (opens in a new tab)

풀이

1

import java.util.*;
 
public class Solution {
 
    public String solution(int n, int k, String[] cmd) {
        Stack<Integer> deleted = new Stack<>();
 
        int[] up = new int[n + 2];
        int[] down = new int[n + 2];
 
        for (int i = 0; i < n + 2; i++) {
            up[i] = i - 1;
            down[i] = i + 1;
        }
 
        k++;
 
        for (String c : cmd) {
            if (c.startsWith("C")) {
                deleted.push(k);
                up[down[k]] = up[k]; // k의 아래부분의 위가 k의 위가 되야 함
                down[up[k]] = down[k]; // k의 위 부분의 아래가 k의 아래가 되야 함
                k = n < down[k] ? up[k] : down[k];
            }
            else if (c.startsWith("Z")) {
                int restore = deleted.pop();
                down[up[restore]] = restore; // resotre의 위의 아래가 restore이 되야함
                up[down[restore]] = restore; // restore의 아래의 위가 restore이 되야함
            }
            else {
                String[] s = c.split(" ");
                int x = Integer.parseInt(s[1]);
                for (int i = 0; i < x; i++) {
                    k = s[0].equals("U") ? up[k] : down[k];
                }
            }
        }
 
        char[] answer = new char[n];
        Arrays.fill(answer, 'O');
 
        for (int i : deleted) {
            answer[i - 1] = 'X';
        }
 
        return new String(answer);
    }
}

2

import java.util.*;
 
public class Solution {
        public String solution(int n, int k, String[] cmd) {
        Stack<Integer> remove_order = new Stack<Integer>();
        int table_size = n;
        for(int i=0; i<cmd.length; i++) {
            char c = cmd[i].charAt(0);
            if(c=='D')
                k+=Integer.parseInt(cmd[i].substring(2));
            else if(c=='U')
                k-=Integer.parseInt(cmd[i].substring(2));
            else if(c=='C') {
                remove_order.add(k);
                table_size--;
                if(k==table_size)
                    k--;
            }
            else if(c=='Z') {
                if(remove_order.pop()<=k)
                    k++;
                table_size++;
            }
        }
        StringBuilder builder = new StringBuilder();
        for(int i=0; i<table_size; i++)
            builder.append("O");
        while(!remove_order.isEmpty())
            builder.insert(remove_order.pop().intValue(), "X");
        String answer=builder.toString();
        return answer;
    }
 
}