파이썬
n 개의 배열을 만들고자 할 때
안 되는 예시
fibo = []*n
- fibo = []*n는 리스트를 만들지만, 이 방식은 n개의 배열을 만들지 않는다.
- 실제로는 빈 리스트에 n을 곱한 결과로, 빈 리스트가 유지된다.
💡 n개의 빈 요소 리스트를 만들고 싶다면
1️⃣ None을 포함한 길이 n의 리스트를 생성
fibo = [None] * n
print(fibo) # 출력: [None, None, None, None, None]
2️⃣ 특정 값으로 초기화된 길이 n의 리스트 생성
fibo = [0] * n
print(fibo) # 출력: [0, 0, 0, 0, 0]
피보나치 수
1️⃣ 1234567로 나누는 이유
- 값의 크기 제한
- 피보나치 수는 순서가 커질수록 매우 빠르게 증가하기 때문에, 큰 숫자를 계산하다 보면 메모리와 연산 시간 모두 부담이 된다. 10^ 번째 피보나치 수는 수십만 자리의 수로, 계산과 저장이 어렵다. 따라서 결과를 1234567로 나누어 계산하면 값이 작아져서 더 빠르고 효율적으로 연산할 수 있다.
- 문제의 특성 (모듈러 연산)
- 많은 문제에서 값이 매우 커질 때는 특정 수로 나눈 나머지를 구하는 방식이 사용된다. 특히 피보나치 수처럼 증가 속도가 매우 빠른 경우 모듈러 연산을 통해 결과의 크기를 조절하는 것은 일반적이다.
따라서 1234567로 나누는 이유는 값의 크기 제한과 모듈러 연산 규칙을 따른 요구사항 때문이다.
2️⃣ fibo[0] = 0, fibo[1] = 1 미리 정의하는 이유
피보나치 수열에서 첫 두 항, 즉 fibo[0] = 0과 fibo[1] = 1은 시작값이자 수열의 정의에 해당하기 때문에 따로 저장한다. 이들은 피보나치 수열을 계산하는 기초가 된다. 이유는 다음과 같다.
- 재귀적 정의
- 피보나치 수열은 F(n) = F(n − 1) + F(n − 2) 로 정의되며, 과 F(1) = 1 이 없으면 이후의 모든 피보나치 수를 계산할 수 없다. fibo[0]과 fibo[1]이 초기화되지 않으면, 재귀적 연산을 시작할 수 없게 된다.
- 계산 효율성
- 첫 두 항을 미리 저장하면, 이후 연산에서는 이 값을 참조해 빠르게 진행할 수 있다. 특히, 반복적 방식으로 피보나치 수열을 계산할 때, fibo[0] 과 fibo[1] 가 미리 정의되어 있으면 각 항을 반복문으로 간단히 계산해 나갈 수 있다.
- 예외 처리
- 피보나치 수열을 정의대로 계산할 때 n = 0 또는 n = 1일 때도 결과를 바로 얻기 위해 초기값으로 저장해둔다.
📜 작성한 게시글
[Programmers 코딩테스트 L2. 피보나치 수] 👉 https://dev-cloud.tistory.com/394
[SWEA 코딩테스트 2005. 파스칼의 삼각형] 👉 https://dev-cloud.tistory.com/395
[SWEA 코딩테스트 1940. 가랏! RC카!] 👉 https://dev-cloud.tistory.com/396
'TIL' 카테고리의 다른 글
[TIL] 2024년 11월 14일 (1) | 2024.11.15 |
---|---|
[TIL] 2024년 11월 11일 (1) | 2024.11.12 |
[TIL] 2024년 11월 09일 (0) | 2024.11.10 |
[TIL] 2024년 11월 08일 (2) | 2024.11.09 |
[TIL] 2024년 11월 07일 (0) | 2024.11.07 |