알고리즘/프로그래머스

LEVEL 3 : 표 편집

webmaster 2021. 12. 8. 18:36
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