인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

내꿈은프로틴부자님의 프로필 이미지
내꿈은프로틴부자

작성한 질문수

세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)

재귀함수 이해하기 [문제풀이] : BOJ 10870

BOJ 10870 문제 질문드립니다.

해결된 질문

작성

·

83

·

수정됨

0

 

섹션 2의 재귀함수 이해하기 파트에서 풀이 1에서

n을 입력하는 것과 0,1의 값을 정해주는 것 그리고 for문의 형식까지는 이해했습니다.

하지만 arr = [-1] * (n + 2)가 주석을 봐도 어떤 것을 의미하는지 잘 모르겠습니다

 

답변 1

1

알리 Ally님의 프로필 이미지
알리 Ally
지식공유자

안녕하세요. 내꿈은프로틴부자님!

 

풀이에서 arr은 앞으로 갱신하며 저장해나갈 n번째 피보나치 수를 저장하는 리스트입니다.

arr = [-1] * (n + 2)은 리스트를 선언 및 할당하는 코드인데요.

풀이하자면, -1 원소를 (n + 2) 크기만큼 채워 리스트를 생성하는 것을 의미합니다.

예를들어, arr = [-1] * 5를 수행하면, arr에는 [-1,-1,-1,-1,-1]이 할당됩니다.

 

각 인덱스의 값을 -1 원소로 채운 이유는 각 인덱스가 피보나치수로 갱신됐는지 구분하기 위함인데요.

이는 피보나치수가 -1이 나올 수 없기에 -1로 남아있는 인덱스는 갱신이 안됐다는걸로 나타낼 수 있기 때문입니다.

 

리스트의 크기를 n+2로 잡은 이유는 리스트에 초기값 2개를 세팅하기 위해서입니다.

피보나치 수는 2개의 값을 더해가며 갱신하는 값인데요.

그러다보니 재귀적으로 갱신하기 위해서는 2개의 값이 필수적으로 필요합니다.

따라서 풀이 초반에 초기값 2개를 미리 세팅하려다보니, 리스트의 크기가 2개 이상 원소를 저장해야하는 크기가 되어야합니다.

n+2에서 n=0일 때, 리스트의 크기가 2를 만족함으로 n+2 크기를 준 것입니다.

 

또 궁금하신 점 있으시면 언제든 질문 부탁드립니다.

감사합니다. :)

정말 감사합니다....! 한참을 고민했는데 깔끔히 해결되었습니다

내꿈은프로틴부자님의 프로필 이미지
내꿈은프로틴부자

작성한 질문수

질문하기