Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 금 채굴하기
- IT 좀 아는 사람
- 코딩테스트
- 백준
- 즉시로딩
- 백준 #1010 #다리놓기
- 코드트리 챌린지
- 동적 계획법
- 멀록 조명등
- spring
- 지연로딩
- 행복한 수열의 개수
- 코딩테스트실력진단
- til
- 회의실 배정
- eager
- 구름톤
- 완전탐색
- 구름톤 챌린지
- @EntityGraph
- 최장 공통 부분수열
- 공부하기 싫어 #그래도 해야해
- 1005 #ACM craft #백준
- 구름톤 트레이닝
- JPA
- 코드트리
- 1931번
- TagLibraryValidator
- Today I Learned
- 공부 기록
Archives
- Today
- Total
화분
[1904]01타일 풀이 본문
문제 : https://www.acmicpc.net/problem/1904
풀이과정:
N = int(input())
fibo_value = [-1]*(N + 1)
def fibonacci(n):
if fibo_value[n] != -1:
return fibo_value[n]
if n == 1:
fibo_value[1] = 1
return 1
if n == 2:
fibo_value[2] = 2
return 2
else:
fibo_value[n] = fibonacci(n-2) + fibonacci(n-1)
return fibo_value[n]
print(fibonacci(N) % 15746)
고민하다가 피보나치 수열 문제라는 것을 알고 코드를 위처럼 짰으나.. 런타임 에러가 났다. 찾아보니 재귀함수가 너무 깊어져도 런타임 에러가 난다고 한다. 나는 iteration을 이용하여 풀기로 하였다.
N = int(input())
first, second = 1, 2
for i in range(1, N):
first, second = second % 15746, (first + second) % 15746
print(first)
결과적으로 다른 사람의 코드를 본게 이 문제를 해결하는데 도움이 되었다. 배열을 생성하여 메모이제이션을 이용하려 풀려 했는데 메모리 초과 문제가 생겼다. 어떻게 풀지 고민하다가 다른 사람이 한 걸 통해 풀이방법을 알아내어 작성하였다. 변수를 두 개만 사용하여 피보나치 수열을 알아내는 혁신적인 방법이었다. 작성한거까진 좋았는데 그 과정에서도 시간 초과 문제가 생겼다. 마지막 줄 print문에서 한번 나머지를 구하려 하지 않고 for문 반복 과정에서 15746를 계속 나눠주도록 하였다. 결국 문제를 해결하였다. 하지만 스스로 해결하지 못해서 씁쓸하다...
엄청나게 커지는 수를 더하는 것보다 지속적으로 수를 나머지 연산자로 크기를 줄여주는게 시간을 줄일 수 있다는 사실을 알 수 있었다.
'Study > CODINGTEST' 카테고리의 다른 글
[구름톤 챌린지 5일차] 이진수 정렬 (0) | 2023.08.19 |
---|---|
[9251]LCS (0) | 2022.02.16 |
[12865]평범한 배낭 (0) | 2022.02.15 |
[1005]ACM craft (0) | 2022.02.12 |
[1010]다리 놓기 (0) | 2022.02.12 |