은세고화
뚜렷한 기억보단 흐릿한 잉크를
은세고화
전체 방문자
오늘
어제
  • 분류 전체보기 (95)
    • TDD (2)
      • 학점 산출 프로그램 (2)
    • IT (43)
      • 부스트코스 (18)
      • CS50 (3)
      • 도서추천 알고리즘 (2)
      • 스터디 일정 (3)
      • 스프링 (3)
      • 프로젝트 개발 중 발생한 에러 (8)
      • 웹개발 (3)
      • DB (3)
    • 독서 후기 (12)
      • 도서 (12)
    • e북 (3)
    • 알고리즘 (26)
    • 프로젝트 (6)
      • 향수 (6)
    • 회고 (1)

블로그 메뉴

  • 홈

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
은세고화

뚜렷한 기억보단 흐릿한 잉크를

알고리즘

[JAVA 자바] 프로그래머스 PCCP 모의고사 3번 유전법칙

2023. 6. 9. 19:33
반응형

https://school.programmers.co.kr/learn/courses/15008/lessons/121685

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

재귀로 풀수있는 문제다. 다른풀이보면 스택과 큐로도 풀었던데 스택과 큐로는 잘 모르겠다.

 

재귀로 풀때 핵심

재귀로 풀때 핵심은 주어진 세대와 인덱스[3,25]를 받아서 값이 있는 부모까지 재귀를 타고 부모의 값을 찾았다면 그에 해당하는 자식값을 리턴하는식으로 풀 수 있다.

 

무슨말이냐면 2세대의 인덱스가 1일때는 3을 리턴하고 2세대의 인덱스가 2일때는 4를 리턴한다고 치자.

5세대부터 재귀를 탐색한다. 4세대, 3세대, 2세대에 도달하면 현재 인덱스를 구하고 3을 리턴했다면 3세대는 받은 3을 가지고 자식값을 연산하뒤 4세대로 리턴하고 4세대도 3세대에게 받은 값으로 5세대에게 리턴하는식이다.

 

1 -> 2 -> 3 -> 4 -> 5로 재귀를 탐색한다면 1,2,3,4,5번까지 재귀를 하고 5번이 리턴한 값을 가지고 4번,3번, 2번,1번이 사용한다.

이렇게 설계하려면 함수를 다음과 같이 설계해야한다.

 

public void dfs(int i){
	if(i == 5){
    	//값 연산 후 리턴
        return i
    }

	dfs(i+1); //내 부모가 리턴한 값을 여기서 사용한다.
    //받은 값으로 연산
}

 

이를 기반으로 재귀로 2세대까지 탐색하고 2세대에서 리턴한 값으로 3세대, 4세대, n세대까지 탐색하는식으로 풀 수 있다.

 

class Solution {
    static String[] been = {"rr", "RR", "Rr", "Rr"};
    
    public String[] solution(int[][] queries) {
        String[] answer = new String[queries.length];
        for(int i=0; i<queries.length; i++){
            answer[i] = dfs(queries[i][0], queries[i][1]);
        }

        return answer;
    }
    static String dfs(int gener, int index){
        if(gener == 1) return "Rr";
        if(gener == 2){
            return been[index%4];
        }
        int parentIndex = (int)Math.ceil(index / (double)4);
        String temp = dfs(gener-1, parentIndex);
        if(temp.equals("Rr")) return been[index%4];
        return temp;
    }
}
반응형
저작자표시

'알고리즘' 카테고리의 다른 글

[코드트리 조별과제] lower, upper bound  (0) 2024.08.25
[코드트리 조별과제] 시간복잡도  (0) 2024.07.27
[JAVA 자바] 프로그래머스 과제 진행하기  (2) 2023.06.09
[JAVA 자바] 백준 2179  (1) 2023.05.25
[프로그래머스] 혼자 놀기의 달인 자바  (0) 2022.10.13
    '알고리즘' 카테고리의 다른 글
    • [코드트리 조별과제] lower, upper bound
    • [코드트리 조별과제] 시간복잡도
    • [JAVA 자바] 프로그래머스 과제 진행하기
    • [JAVA 자바] 백준 2179
    은세고화
    은세고화

    티스토리툴바