표 편집
풀이
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;
}
}