사용 언어 - Python3
문제 - 유전법칙
https://school.programmers.co.kr/learn/courses/15008/lessons/121685
정답
규칙찾기! 스택 활용
모든 부모들로 거슬러 올라가서 그 부모가 몇 번째 자식이었는지 확인
(내 풀이)
해당 부모의 몇번째 자식인지 확인
(p-1)를 4로 나누면, 몫 = 몇번째 세대 / 나머지 = 몇번째 자식인지 확인
1. 인덱스를 맞춰주기 위해 p -= 1
2. n == 1 세대이면, 그냥 return 'Rr'
3. while n > 1: # 2세대 이상인 경우 모든 세대를 올라가면서 확인해준다.
stack.append(p%4) = 4로 나눈 나머지 = 부모의 몇번째 자식인가 = 0,1,2,3번째 자식 중 하나
n-=1 한 세대씩 올라가면서 확인
p = p//4 = 4로 나눈 몫 = 몇 번째 세대인가 = 0,1,2세대...
예 )
# 3세대 8번째 => n = 3, p = 7
# p%4 = 3, stack = [3], p = 1, n = 2
# p%4 = 1%4 = 1, stack = [3,1], p = 0, n = 1
# num = 3, rr
# 3세대 2번째 => n = 3, p = 1
# p%4 = 1 stack = [1], p = 0, n = 2
# p%4 = 0 stack = [1,0], p = 0, n = 1
# num = 0, RR
4. stack에 중간에 한번이라도 0과 3이 나오면 = 부모들 중 한 부모라도 첫번째(RR)나 마지막 자식(rr)이었다면
= 그 자식들도 항상 RR,rr이다
5. 나머지는 모두 'Rr'
6. return [*map(함수명,함수에 들어가는 리스트)]
def get_gene(pose):
n,p = pose
stack = []
p -= 1 # 1번째 개체, 인덱스 0부터 시작
while n > 1: # 1세대면 그냥 'Rr'
# 모든 부모 세대들의 몇 번째 자식이었는지를 모두 저장
stack.append(p%4) # 나머지 = 부모의 몇번째 자식인지 0,1,2,3
n -= 1 # 1세대, 인덱스 0부터 시작
p //= 4 # 몫 = 몇번째 세대인지 0,1,2...
while len(stack) > 0:
num = stack.pop()
# 중간에 한번이라도 RR,rr이 나오면 해당 형질 리턴
if num == 0: return 'RR' # 부모의 첫번째 자식
if num == 3: return 'rr' # 부모의 마지막 자식
return 'Rr'
def solution(queries):
return [*map(get_gene, queries)]
레퍼런스
'Algorithm > 스택&큐&덱&힙' 카테고리의 다른 글
[프로그래머스] PCCP 모의고사 2회 2번 신입사원 교육 (0) | 2023.12.15 |
---|---|
[프로그래머스] PCCP 모의고사 1회 4번 운영체제 (0) | 2023.12.14 |
[프로그래머스 lv 3] 이중우선순위큐 (0) | 2023.06.19 |
[프로그래머스 lv 3] 디스크 컨트롤러 (0) | 2023.06.19 |
[프로그래머스 lv 2] 더 맵게 (0) | 2023.06.16 |
댓글