알고리즘/프로그래머스

[PCCP 모의고사 #1] 3번 - 유전법칙

베리영young 2024. 12. 9. 13:05

사용 알고리즘: 재귀?

사용 언어: java

 

import java.util.*;

class Solution {
    String[] answer;
    
    public String[] solution(int[][] queries) {
        answer= new String[queries.length];
        
        for(int i=0; i<queries.length; i++) {
            if(queries[i][0]==1) {
                answer[i] = "Rr";
                continue;
            }
            List<int[]> tree = new ArrayList<>();
            dfs(queries[i][0], queries[i][1], tree, i);
        }
        
        return answer;
    }
    
    public String toDown(List<int[]> tree) {
        //for(int[] t : tree)
            //System.out.println(Arrays.toString(t));
        int[] t = tree.remove(tree.size()-1);
        String parent = "";
        if(t[1]==1) parent = "RR";
        else if(t[1]==4) parent = "rr";
        else parent = "Rr";
        
        for(int i=tree.size()-1; i>=0; i--) {
            if(parent.equals("RR")) return "RR";
            if(parent.equals("rr")) return "rr";
            
            t = tree.remove(tree.size()-1);
            if(t[1]==1) parent = "RR";
            else if(t[1]==4) parent = "rr";
            else parent = "Rr";
        }
        return parent;
    }
    
    public void dfs(int generation, int bang, List<int[]> tree, int idx) {
        if(generation == 1) {
            answer[idx] = toDown(tree);
            return;
        }
        
        //
        int pbang = (bang-1) / 4 + 1;
        int bbang = 1;
        if(pbang * 4 == bang) bbang = 4;
        else if(pbang * 4 - 1 == bang) bbang = 3;
        else if(pbang * 4 - 2 == bang) bbang = 2;
        
        tree.add(new int[] {generation, bbang});
        dfs(generation-1, pbang, tree, idx);
    }
}

 

 

흠... 뭔가 좀 더 깔끔한 방법 없을까

'알고리즘 > 프로그래머스' 카테고리의 다른 글

소수 찾기  (0) 2024.12.11
[PCCP 모의고사 #1] 4번 - 운영체제  (1) 2024.12.09
모음사전  (0) 2024.12.09
쿼드압축 후 개수 세기  (1) 2024.12.09
[PCCP 모의고사 #1] 2번 - 체육대회  (0) 2024.12.02