상세 컨텐츠

본문 제목

[PCCP모의고사 1회 ] 유전법칙(파이썬)

알고리즘 공부

by Tabris4547 2023. 1. 12. 15:37

본문

728x90

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

 

프로그래머스

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

programmers.co.kr

스택을 활용한 문제.

왜 스택을 써야하는지 납득이 힘들었지만

문제를 차차 이해해나가면서 받아드렸습니다.

1세대일 때는 Rr밖에 없으니 신경쓸 게 없습니다

문제는 2세대 이후부터입니다.

RR,rr을 만나면 크게 상관없겠지만

Rr인 지점을 만나면

계속 RR Rr Rr rr이 반복이 되기 때문에

이게 어디지점을 만나는지 계속 고려해야합니다.

3세대를 기준으로 보면

구간을 4개로 나누면

4로 나눴을 떄의 나머지가

0 1 2 3이 반복되는 게 보입니다.

만약 현재 숫자가 4로 나눴을 때

0이면 RR, 3이면 rr이겠지만

1 2 라면 Rr 구간인지 아닌지 살펴야합니다.

 

만약 3 8의 경우라면

7%4-->3 -->rr

 

만약 3 6인 경우라면

5%4-->2 --> RR,rr 둘 다 아님.

1%4-->1 -->Rr에서 내려온 것.

따라서 Rr

 

 

그러니 stack안에

계속 4로 나눴을 때 나머지를 받아주고

마지막부터 차근차근 올라가는 데로 받아야합니다.

 

def solution(queries):
    answer = []

    for n, p in queries:
        if n == 1:
            answer.append("Rr")
            continue

        now = 2
        p -= 1
        go = False
        stack = []
        while now <= n:
            re = p % 4
            stack.append(re)

            p //= 4
            now += 1
        print(stack)
        go = True
        while stack:
            now = stack.pop()
            if now == 0:
                go = False
                answer.append("RR")
                break

            elif now == 3:
                go = False
                answer.append("rr")
                break

        if go:
            answer.append("Rr")
    return answer

 

반복되는 구조가 이어질 때

어떤 식으로 자료를 처리해야하는지 정리할 수 있었습니다.

728x90

관련글 더보기

댓글 영역