728x90
https://programmers.co.kr/learn/courses/30/lessons/81303
코딩테스트 연습 - 표 편집
8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO"
programmers.co.kr
문제

문제 1 
문제 2 
문제 3 
문제 4 
문제 5 
문제 6 
문제 7 
문제 8 
제한사항
풀이
- Stack을 활용하여 푸는 문제이다(후입 선출)
- Z를 누를 때, 큐에서 빼주고, C를 누를 때 큐에 더해준다
- 고려사항
- 1) 테이블에서 데이터를 복구할 때, 제거 했었던 Index가 현재 선택하는 index보다 작을 경우 index를 증가시켜주어야 한다(그래야 현재 선택된 행이 그대로 선택된다)
- 2) 삭제된 행이 마지막일 경우 바로 윗 행이 선택된다.
- U일경우 : 선택할 행 = 현재 선택된 행 - 위로 올릴 값
- D일 경우 : 선택할 행 = 현재 선택 된 행 + 아래로 내릴 값
- C : 현재 행 Stack에 Push
- Z : 마지막에 삭제한 행 복구
-
public static String solution(int n, int k, String[] cmd) { StringBuilder sb = new StringBuilder(); Stack<Integer> cache = new Stack<>();//삭제한 Index 집합, 후입선출 int tableSize = n; // 처음 테이블 크기로 초기화 int idx = k; // 초기 선택된 행 for(String command : cmd) { String[] c = command.split(" "); if(c[0].equals("U")) { // U일 경우 idx -= Integer.parseInt(c[1]); // 현재 선택된 행을 위로 올린다(index는 내려감) }else if(c[0].equals("D")) { //D일 경우 idx += Integer.parseInt(c[1]); //현재 선택된 행을 아래로 내린다(index는 올라감) }else if(c[0].equals("C")) { // C일 경우 // 삭제 tableSize--; //테이블 크기 감소 cache.push(idx); // 선택되었던 index를 Stack에 넣는다 if(idx == tableSize) { //만약 선택된 행이 마지막 행일 경우 idx--; // 마지막 행을 지울경우 한 행 위로 올린다, } }else if(c[0].equals("Z")) { // Z일 경우 // 복구 int chart = cache.pop(); // stack에서 값을 뽑는다, 지웠을때의 index if(chart <= idx) { // 만약 지웠을때의 index가 현재 선택된 index보다 작을 경우 idx++; //현재 선택된 인덱스를 하나 증가 시킨다 } tableSize++; // 테이블 크기 증가 } } for(int i=0;i<tableSize;++i) { // 현재 테이블 크기만큼 sb.append("O"); // O추가 } while(!cache.isEmpty()) { // 삭제 된 내역들 int point = cache.pop(); sb.insert(point, "X"); //삭제된 내역들을 해당 위치에 X로 추가해준다. } return sb.toString(); }
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| LEVEL 3 : 불량 사용자 (0) | 2021.12.11 |
|---|---|
| LEVEL 3 : 보석쇼핑 (0) | 2021.12.08 |
| LEVEL 3 : 셔틀버스 (0) | 2021.12.07 |
| LEVEL 3 : 자물쇠와 열쇠 (0) | 2021.11.26 |
| LEVEL 3 : 다단계 칫솔 판매 (0) | 2021.11.26 |