개발 공부 기록
728x90

https://programmers.co.kr/learn/courses/30/lessons/81303#qna

 

코딩테스트 연습 - 표 편집

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

2021 카카오 인턴십 level3 문제.

효율성 테스트가 있는 문제이기 때문에 시간을 줄여야 한다.

다른 사람들과 카카오 테크 블로그를 확인하면 linkedList로 풀었다는데, 나는 k(선택된 행 번호)만 이용해서 이리저리 굴려서 완성했다.

마지막 StringBuilder 쓴 것과 table size 를 이용한 것만 다른 풀이를 참고했더니 효율성 테스트까지 통과할 수 있었다!..

다음에 링크드리스트로 풀게되면 풀이를 추가할 예정이다.

 

import java.util.Stack;
import java.util.StringTokenizer;

public class 표_편집 {

    Stack<Integer> stack = new Stack<>();
    int size;

    public String solution(int n, int k, String[] cmd) {
	//열의 사이즈(테이블 사이즈)
        size = n;

        for(String c : cmd) {
            char cur = c.charAt(0);
            if(cur == 'U' || cur == 'D') k = move(k, c);
            else if(cur == 'C') k = cancel(k);
            else k = rollBack(k);
        }

        return compare();
    }

    //이동하는 함수
    private int move(int k, String c) {

        StringTokenizer st = new StringTokenizer(c);
        String cmd = st.nextToken();

        int num = Integer.parseInt(st.nextToken());

        if (cmd.equals("U")) return k - num;
        else return k + num;
    }

    //삭제하는 함수
    private int cancel(int k) {

        stack.push(k);

        size --;
        if(size == k) k -= 1;

        return k;
    }

    //삭제한 걸 되돌리는 함수
    private int rollBack(int k) {

        int last = stack.pop();
        if(last <= k) k += 1;

        return k;
    }

    //비교하는 함수
    private String compare() {

        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < size; i ++) {
            sb.append("O");
        }
        while(!stack.isEmpty()) {
            sb.insert(stack.pop(), "X");
        }

        return sb.toString();
    }
}

 

 

728x90
profile

개발 공부 기록

@찐만두

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!