미소를뿌리는감자의 코딩
[백준 2024/09/28] 1904번 01타일 본문
728x90
1. 문제
https://www.acmicpc.net/problem/1904
2. 접근 방법
n에 대해서 나열해 보면,
n = 1 -> 1개
n = 2 -> 2개
n = 3 -> 3개
n = 4 -> 5개
n = 5 -> 8개
n = 6 -> 13개
n = 7 -> 21개
n = 8 -> 34개
n = 9 -> 55개
n = 10 -> 89개
잘 보면 패턴을 확인할 수 있다. 그렇다. 피보나치 수열이다.
def fibo1(n, save):
if n <= 0:
return 1
if n == 1:
return 1
if n == 2:
return 2
b1 = 1
b2 = 2
result = 3
for i in range(3, n+1, 1):
result = b1 + b2
b1 = b2
b2 = result
return result % 15746
if __name__ == "__main__":
n = int(input())
save = [-1] * (n+1)
print(fibo1(n, save))
이렇게 돌리게 되면?! 시간 초과가 나게 된다.
따라서, result = (b1 + b2)%15746 이 된다.
왜냐? modulo 연산은 분배가 가능하기 때문이다.
즉,
이게 동일하다는 것이다.
두 코드가 동일한 결과를 반환하는 이유는, 모듈로 연산의 특성 때문에 덧셈 연산 후 모듈로 연산을 하든, 마지막에 한 번만 모듈로 연산을 하든, 최종 결과가 같기 때문입니다.
3. 코드
def fibo1(n, save):
if n <= 0:
return 1
if n == 1:
return 1
if n == 2:
return 2
b1 = 1
b2 = 2
result = 3
for i in range(3, n+1, 1):
result = (b1 + b2) % 15746
b1 = b2
b2 = result
return result % 15746
if __name__ == "__main__":
n = int(input())
save = [-1] * (n+1)
print(fibo1(n, save))
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 2024/09/28] 9084번 동전 (0) | 2024.09.28 |
---|---|
[백준 2024/09/28] 9251번 LCS (0) | 2024.09.28 |
[백준 2024/09/25] 1948번 임계경로 (0) | 2024.09.25 |
[백준 2024/09/24] 2637번 장난감 조립 (0) | 2024.09.24 |
[백준 2024/09/23] 2252번 줄 세우기 (0) | 2024.09.23 |