반응형
문제분석
멘델의 유전법칙을 이용하여 n세대의 X번 개체의 유전자를 반환하는 문제다.
이 문제에선 1세대가 무조건 Rr이다.
멘델의 유전법칙에따라 2세대부터 RR일경우, 자식은 모두 RR
Rr일경우, 1:2:1 비율로 RR Rr rr 이 생성,
rr일경우 모든 자식이 rr이 생성된다.
멘델의 유전법칙에따라서 N 세대에 X번째 의 나올걸 유츄해야한다.
유전 세대는 이전세대의 4배씩 생성된다.
N세대에 X번째의 정확한 자식의 유전자를 알기위해선 N-1세대의 부모의 여부를 알아야한다.
그 여부를 Stack을 이용해서 구현했다.
Stack을사용해 X번째를 4로나눈 나머지를 사용하여 부모의 유전자를 추정해간다.
문제는 1번부터세고, 컴퓨터는 0번부터세기에, 둘의 시작번호를 통일시키기 좀 애를 먹었다.
문제풀이
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import java.util.*;
class Solution {
public String[] solution(int[][] queries) {
String[] answer = new String[queries.length];
//멘델 Rr의 분열규칙을 저장
String[] arr = new String[]{"RR","Rr","Rr","rr"};
int idx=0;
for(int[] query:queries){
int level=query[0];
int count = query[1]-1;
Stack<Integer> stack =new Stack<>();
// 빠르게구할수있는 Level2까진 예외처리
if(level==1){
answer[idx]="Rr";
idx++;
continue;
}
if(level==2){
answer[idx]=arr[count];
idx++;
continue;
}
//Level3부턴 로직을 사용함
while(level!=1){
int namuge=count%4;
count/=4;
level-=1;
stack.push(namuge);
}
while(!stack.isEmpty()){
String current= arr[stack.pop()];
if(current.equals("RR")){
answer[idx]=current;
break;
}
else if(current.equals("rr")){
answer[idx]=current;
break;
}
answer[idx]=current;
}
idx++;
}
return answer;
}
}
|
cs |
반응형
'알고리즘' 카테고리의 다른 글
PCCP 모의고사 1회 : 체육대회 (0) | 2022.09.18 |
---|---|
PCCP 모의고사 1회: 외톨이 알파벳 (0) | 2022.09.18 |