[코드트리] - 무~

BinaryHyeok·2024년 1월 2일
0

Algorithm

목록 보기
23/25

무~

풀이

N번째 문자를 찾을 수 있는 depth를 구한 후 재귀를 통해 정답을 찾았다.
이전 depth의 부분에 N번째 위치가 포함된다면, 재귀를 통하여 depth를 낮추면서 t가 0이 될 때 정답을 구할 수 있다. 그 외에는 현재 depth인 t에 따라 정답을 구할 수 있다.

코드

import java.io.*;
import java.util.*;

public class Main {
    static List<Integer> list;
    static char answer;
    static boolean flag;
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        list = new ArrayList<>();
        String moo = "moo";
        list.add(3);
        // 최대 depth를 구함
        int t = 0;
        for(int i = 1; i <= N; i++){
            int n = list.get(i - 1) * 2 + i + 3;
            list.add(n);
            if(n >= N){
                t = i;
                break;
            }
        }
     
        flag = false;
        moo(t, N);
        System.out.println(answer);

    }

    public static void moo(int t, int N){
        if(flag) return;
        
        if(t == 0){
            answer = getChar("moo", N - 1);
            flag = true;
            return;
        }

        int mid = t + 3;
        int prevLen = list.get(t - 1);

        if(prevLen >= N){
            moo(t - 1, N);
        }
        else if(prevLen + mid >= N){
             String str = "moo";
            for(int i = 0; i < t; i++){
                str += "o";
            }
            answer = getChar(str, N - prevLen - 1);
            flag = true;
        }
        else{
            moo(t - 1, N - prevLen - mid);
        }
    }

    public static char getChar(String str, int n){
        return str.charAt(n);
    }
}

0개의 댓글