Techbrad

[백준] 1309번 동물원 DP - 파이썬 본문

Programming/코딩테스트

[백준] 1309번 동물원 DP - 파이썬

brad.min 2024. 6. 30. 11:27
반응형

https://www.acmicpc.net/problem/1309

 

 

풀면서 어려웠던 점

1. DP 테이블을 만들면서 사자를 한마리도 배치하지 않는 경우를 생각해내기 힘들었다.

2. 메모리 초과

 

DP 테이블에서 한마리도 배치않는 경우 0, 1에 배치할 경우 1, 2에 배치할 경우 2로 정한 후에 풀게되면 수월하게 풀 수 있었다.

그리고 int 형은 4Byte라 문제가 없어보이는데 왜 메모리 초과가 발생하는지에 대해 의문이다. 혹시라도 지나가다가 명확히 아시는 분이 있으면 댓글을 부탁드립니다. ㅜ.ㅜ 

N이 100,000이 최대이니까 300,000 개의 int가 있고 이는 1,200,000 byte이고 1.2M 정도 밖에 안되지만 무슨 이유일까... 아무튼 dp를 계산해줄 때 9901을 나눈 나머지를 사용하면 된다.

 

 

최종 제출 코드

N = int(input())
dp = [[0, 0, 0] for _ in range(N)]
dp[0][0], dp[0][1], dp[0][2] = 1, 1, 1

for i in range(1, N):
    dp[i][0] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2]) % 9901
    dp[i][1] = (dp[i - 1][0] + dp[i - 1][2]) % 9901
    dp[i][2] = (dp[i - 1][0] + dp[i - 1][1]) % 9901

print(sum(dp[N-1]) % 9901)

 

 

 

반응형