Google 태그 관리자 아이콘

알고리즘 풀이

.leetcode(394. Decode String)

silvergoni 2021. 1. 25. 23:02
반응형

문제

https://leetcode.com/problems/decode-string/

문제 풀기 전

  1. stack으로 풀 수 있겠다.
  2. ]문자가 나오기전까지 stack에 넣다가 나오면 pop한다. [문자가 나올대까지 하고 그다음 숫자를 나오게 해서 그려준다.
  3. 숫자는 한자리가 아니기때문에 숫자는 특별히 하나의 문자로 만들어서 stack에 넣어줬다.

직접 푼 풀이

소요시간: 36분(21:51 ~ 22:27)

class Solution {
    public String decodeString(String s) {

        LinkedList<String> stack = new LinkedList<>();
        String sub = "";
        for (int i=0; i<s.length(); i++) {
            char cur = s.charAt(i);
            if (cur == ']') {
                String popped = "";
                while(true) {
                    String temp = stack.pop();
                    if (temp.equals("[")) {
                        break;
                    }
                    popped = temp + popped;
                }

                Integer count = Integer.valueOf(stack.pop());
                String repeat = popped+"";
                for (int c=1; c<count; c++) {
                    popped = popped + repeat;
                }
                stack.push(popped);
            } else if ('a' <= cur && cur <= 'z') {
                stack.push(cur+"");
            } else if (cur == '[') {
                stack.push(sub+"");
                sub = "";
                stack.push(cur+"");
            } else {
                sub += cur;
            }
        }

        String result = "";
        while (!stack.isEmpty()) {
            result = stack.pop() + result;
        } 
        return result;
    }
}

느낀점

  1. 풀긴 풀었는데 뭔가 깔금하지는 않다.
  2. Character.isDigit로 숫자 여부를 판단할 수 있고 보통 char에서 숫자를 나타낼때는 char - '0'로 하면 되는걸 기억해두자.

누적되는 알고리즘 접근 설명서

2021/01/09 - [알고리즘 풀이] - .leetcode(알고리즘 문제풀이 접근)