Skip to content

Commit c1d47a8

Browse files
authored
solve: 코딩테스트 문제 풀이 - 29일차
1 parent 331c430 commit c1d47a8

1 file changed

Lines changed: 61 additions & 0 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public String solution(int n, int k, String[] cmd) {
5+
int[] prev = new int[n];
6+
int[] next = new int[n];
7+
8+
for (int i=0; i<n; i++) {
9+
prev[i] = i - 1;
10+
next[i] = i + 1;
11+
}
12+
/*
13+
for (int num: next) {
14+
System.out.print(num + " ");
15+
}
16+
System.out.println();
17+
18+
for (int num: prev) {
19+
System.out.print(num + " ");
20+
}
21+
System.out.println();
22+
*/
23+
next[n-1] = -1;
24+
25+
Stack<Integer> removed = new Stack<>();
26+
for (String input: cmd) {
27+
char op = input.charAt(0);
28+
29+
if (op == 'D' || op == 'U') {
30+
int distance = Integer.parseInt(input.substring(2));
31+
for (int i=0; i<distance; i++) {
32+
k = (op == 'U') ? prev[k] : next[k];
33+
}
34+
// System.out.println(k);
35+
} else if (op == 'C') {
36+
removed.add(k);
37+
if (prev[k] != -1) next[prev[k]] = next[k];
38+
if (next[k] != -1) prev[next[k]] = prev[k];
39+
40+
if (next[k] != -1) {
41+
k = next[k];
42+
} else {
43+
k = prev[k];
44+
}
45+
} else if (op == 'Z') {
46+
int restore = removed.pop();
47+
if (prev[restore] != -1) next[prev[restore]] = restore;
48+
if (next[restore] != -1) prev[next[restore]] = restore;
49+
}
50+
}
51+
52+
StringBuilder sb = new StringBuilder("O".repeat(n));
53+
while (!removed.isEmpty()) {
54+
int remove = removed.pop();
55+
sb.setCharAt(remove, 'X');
56+
}
57+
58+
return sb.toString();
59+
60+
}
61+
}

0 commit comments

Comments
 (0)