inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

BOJ 10870 문제 질문드립니다.

해결된 질문

166

내꿈은프로틴부자

작성한 질문수 4

0

 

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

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

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

 

python 코딩-테스트 알고리즘 재귀함수

답변 1

1

알리 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 크기를 준 것입니다.

 

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

감사합니다. :)

1

내꿈은프로틴부자

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

Iterable 관련 설명 중 의문점

1

74

1

DP 알고리즘 index 0 이유?

0

81

2

백준에서 queue.PriorityQueue() 사용 시 런타임에러가 납니다.

0

78

2

(시간 초과) BOJ 1342 관련하여 질문이 있습니다

1

82

2

BFS, DFS

0

107

2

이중연결리스트에 관한 수업 내용도 있을까요?

0

98

1

영상에서 설명이 잘못됐고 자막이 맞는 내용이라고 자막에 표기

0

113

2

최대값 int(1e6, 1e7, 1e8) 기준

0

275

2

섹션 3 BOJ 1342 //= 연산자 관련

0

88

3

라이브러리 사용

0

118

2

2번 구현 방법 질문 있습니다.

0

169

1

브루트 포스 풀이

0

146

2

다익스트라 음수 간선

0

164

1

종료 조건

0

118

2

BOJ 1342 메모리초과 관련

0

124

2

진짜 엄청나네요. 이 가격에 새로운 컨텐츠 추가라니

0

216

1

섹션3 브루트포스 알고리즘 1342 풀이1 질문

0

153

2

boj 3020

0

128

1

강의 내용 중 백트래킹 존재 여부

0

157

1

제가 공부하는 방법이 괜찮은지 궁금합니다

1

264

2

DP 11053관련 질문있습니다.

0

124

1

17609 투포인터 문제를 재귀로 풀 경우가 궁금합니다!

0

142

3

3020번 풀이 코드관련 질문있어요

0

174

2

재귀 관련 문제 관찰할 때 질문

0

201

1