https://school.programmers.co.kr/learn/courses/15008/lessons/121685
스택을 활용한 문제.
왜 스택을 써야하는지 납득이 힘들었지만
문제를 차차 이해해나가면서 받아드렸습니다.
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
반복되는 구조가 이어질 때
어떤 식으로 자료를 처리해야하는지 정리할 수 있었습니다.
[프로그래머스Lv.3] 퍼즐조각 채우기(파이썬) (0) | 2023.02.17 |
---|---|
[프로그래머스] 주식가격(파이썬) (3) | 2023.01.13 |
[프로그래머스 Lv.3] 여행경로(파이썬) (1) | 2023.01.10 |
[Softeer인증시험1차 기출] 안전운전을 도와줄 차세대 지능형 교통시스템(파이썬) (1) | 2023.01.05 |
[Softeer 인증평가 1차 기출] 로봇이 지나간 경로(파이썬) (1) | 2023.01.05 |
댓글 영역