적절하게 자료구조를 잘 활용해서, 푸는 문제.
시간복잡도를 잘 고려하면서 풀어야 한다.
소스 코드
package programmers.kakao_internship_2021;
import java.util.Stack;
public class _3번_표_편집 {
public String solution(int n, int k, String[] cmd) {
Stack<Integer> removed = new Stack<>();
int arrSize = n;
for (int i = 0; i < cmd.length; i++) {
Command command = getCommand(cmd[i]);
switch(command.cmd) {
case 'U':
k -= command.move;
break;
case 'D':
k += command.move;
break;
case 'C':
removed.add(k);
arrSize--;
// last
if(k > arrSize-1) k--;
break;
case 'Z':
int z = removed.pop();
// 복구하는 인덱스가 현재보다 앞설때
if(z<=k) k++;
arrSize++;
break;
default:
break;
}
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<arrSize;i++) {
sb.append('O');
}
while(!removed.isEmpty()) {
int z = removed.pop();
sb.insert(z,'X');
}
return sb.toString();
}
private Command getCommand(String command) {
char cmd = command.charAt(0);
int move = 0;
if (command.length() > 1) {
move = Integer.parseInt(command.substring(2));
}
return new Command(cmd, move);
}
public static class Command {
char cmd;
int move;
public Command(char cmd, int move) {
this.cmd = cmd;
this.move = move;
}
}
}
'Algorithm' 카테고리의 다른 글
프로그래머스 오픈채팅방 JAVA (0) | 2022.03.11 |
---|---|
프로그래머스 2018 KAKAO BLIND 방금그곡 ( 문자열 ) JAVA (0) | 2021.04.29 |
알고리즘 문제 풀 때 자주하는 for문에서의 실수😅 ( JAVA ) (0) | 2021.04.27 |
플로이드 와샬 알고리즘 (0) | 2021.04.22 |
BOJ 14503번 로봇청소기 ( 구현 , DFS ) JAVA (0) | 2021.04.19 |