https://leetcode.com/problems/count-and-say/

코드설명

깊이우선탐색(DFS)을 활용합니다.

 

문제에 주어진대로 점화식을 세워서 해결하면 됩니다.

코드

정답코드1입니다.

class Solution {
    public String countAndSay(int n) {
        return DFS(n);
    }

    String DFS(int n){
        if(n == 1) return "1";
        StringBuilder ret = new StringBuilder();

        String A = DFS(n - 1);
        for(int i=0; i<A.length(); i++){
            int repeatCnt = 1;
            while(i + 1 < A.length() && A.charAt(i) == A.charAt(i + 1) ){
                repeatCnt += 1;
                i += 1;
            }
            ret.append(repeatCnt).append(String.valueOf(A.charAt(i)));
        }
        return ret.toString();
    }
}

 

정답코드2입니다. 처음에 작성한 코드입니다. 불필요한 변수가 많습니다.

class Solution {
    public String countAndSay(int n) {
        return DFS(n);
    }

    String DFS(int n){
        if(n == 1) return "1";
        StringBuilder ret = new StringBuilder();

        String A = DFS(n - 1);
        for(int i=0; i<A.length(); i++){
            int repeatCnt = 1;
            int idx = i;
            while(idx + 1 < A.length() && A.charAt(idx) == A.charAt(idx + 1) ){
                repeatCnt += 1;
                idx += 1;
            }
            ret.append(repeatCnt).append(String.valueOf(A.charAt(idx)));
            i = idx;
        }
        return ret.toString();
    }
}

+ Recent posts