코딩테스트

[Programmers/JAVA] 표 편집

Eun 2022. 4. 21. 21:34
import java.util.*;
class Solution {
   public String solution(int n, int k, String[] cmd) {
        String answer = "";
        
        Stack<Integer> remove = new Stack<Integer>();
        int index = n;
       // k는 지금 가리키고 있는 인덱스
       // 인덱스는 행 길이
        
        for(int i=0;i<cmd.length;i++) {
        	char c = cmd[i].charAt(0);
        	if(c=='D') {
        		//X칸 아래 이동
        		k+=Integer.parseInt(cmd[i].substring(2));
        	}else if(c=='U') {
        		//X칸 위로 이동
        		k-=Integer.parseInt(cmd[i].substring(2));
        	}else if(c=='C') {
        		// 삭제
        		remove.add(k);
        		index--;
        		if(k==index) {
        			// 마지막 차례라면
        			k--;
        		}
        	}
        	else if(c=='Z') {
        		//최근에 삭제한 것 복구
        		if(remove.pop()<=k) {
                    // 지금 가리키고 있는 것보다 작으면 가리키고 있는것 +1
        			k++;
        		}
                // k보다 크면 인덱스 추가
        		index++;
        	}
        }
        
        StringBuilder builder = new StringBuilder();
        for(int i=0;i<index;i++) {
        	builder.append("O");
        }
        
        while(!remove.isEmpty()) {
            // 스택에 있다는 것은 삭제됐다는 뜻
        	builder.insert(remove.pop().intValue(), "X");
        }
        answer = builder.toString();
        return answer;
    }
}