포스트

[프로그래머스] 유전 법칙

PCCP 모의고사 - 유전법칙 바로가기


문제 설명

자가 수분 유전 가계도


진송이는 위 그림처럼 완두콩 자가 수분 실험을 진행하고자 합니다.
자가 수분한 완두콩은 4개의 자손을 남기게 됩니다.
잡종 완두콩(Rr)이 자가 수분하는 경우, 자손은 RR, Rr, Rr, rr 순서대로 남기고
순종 완두콩(RR, rr)이 자가 수분하는 경우, 자손은 부모와 같은 형질을 갖습니다.

문제에서 만들 프로그램은 진송이가 완두콩의 세대와 해당 세대에서 몇 번째 완두콩인지 주어지면
그 완두콩의 형질이 “RR”, “Rr”, “rr” 중 무엇인지 알려주는 프로그램입니다.

위의 그림을 기준으로 입력이 (2, 4)가 입력되면 2세대의 4번째 완두콩인 “rr”을 뜻하고
(3, 9)가 입력되면 3세대의 9번째 완두콩인 “RR”을 뜻합니다.

문제 풀이

완두콩 가계도를 보면 부모 세대와 자식 세대의 전체 수는 4배의 차이가 존재하며
각 부모의 자식들은 항상 4개이며, 비율은 RR:Rr:rr = 1:2:1 로 유지됩니다.
이 비율을 이용해 주어진 위치의 부모를 반복적으로 구해 자식의 형질을 반환하고자 하였습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
string find_bean_type(int generation, int index) {
    // 1 세대에 도착
    if(generation == 1) {
        return "Rr";
    }

    string parent_bean = find_bean_type(generation - 1, (index / 4));

    if(parent_bean == "RR") {
        return "RR";
    }
    else if(parent_bean == "rr") {
        return "rr";
    }
    else {
        int bean_index = index % 4;
        
        if(bean_index == 0) {
            return "RR";
        } else if(bean_index == 3) {
            return "rr";
        } else {
            return "Rr";
        }
    }
}


후기

1:2:1 이라는 비율을 확인하고 “RR”, “rr” 이 부모인 자식 형질은 쉽게 찾을 수 있었지만
잡종 형질인 “Rr” 을 탐색하는 방법을 찾는데 비교적 많은 시간을 소모했습니다.
결정적으로 재귀 함수의 핵심인 반복적으로 발생하는 상황 을 정확하게 판단하지 못 해
발생한 문제라고 생각되어 다시 한 번 재귀 함수에 대해 공부할 수 있는 좋은 문제였습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.