Today I Learned

최지웅·2024년 3월 8일
0

Today I Learned

목록 보기
110/238

오늘 할일
1. LeetCode

오늘 한일
1. LeetCode

    1. Decode String를 이어서 해결해보겠다.
      첫번쨰 접근을 StringBuilder를 이용하여 숫자를 읽는 Integer_parser, 괄호가 닫혔을 때 앞의 반복횟수를 계산해줄 stringBuilder, 결과를 저장할 result로 코드를 작성해보았다.
public String decodeString(String s) {
        StringBuilder stringBuilder=new StringBuilder();
        Stack<Integer> stack=new Stack<>();
        StringBuilder integer_parser=new StringBuilder();
        StringBuilder result=new StringBuilder();

        for(char c: s.toCharArray()){
            if('0'<=c && c<='9'){//숫자라면
                integer_parser.append(c);
            } else if(c=='['){
                int repeat=Integer.valueOf(integer_parser.toString());
                integer_parser.delete(0, integer_parser.length());
                stack.push(repeat);
            } else if('a'<=c && c<='z'){
                stringBuilder.append(c);
            } else if(c==']'){
                String k=stringBuilder.toString().repeat(stack.pop());
                stringBuilder.delete(0, stringBuilder.length());
                result.append(k);
            }
        }
        return result.toString();
    }


테스트 케이스 통과도 못하고, 전반적으로 난해하다는 단점이 있어 이를 보완해보기로 했다.

두번째 접근으로 문제를 최대한 간단하게 생각해보자. 괄호는 연산자이다. 괄호 앞의 숫자와 괄호안의 문자간의 .repeat연산. 다만 이때 2(3+1)2처럼 연속되는 연산이 있을 뿐이다.
2[2[df]]는 22"df"
3[a]2[bc]는 3"a"+2"bc",
3[a2[c]]는 3("a"+2"c"),
2[abc]3[cd]ef는 2"abc"+3"cd"+ef
숫자 뒤 괄호열림은 *연산, ]뒤 숫자는 +연산, 문자뒤 숫자도 +연산, [없이 문자는 +연산

profile
이제 3학년..

0개의 댓글