From 9fd4bd619113915fa02902f92a52ea79c5c40b1b Mon Sep 17 00:00:00 2001 From: songyc macbook Date: Sat, 10 Jan 2026 22:46:58 +0900 Subject: [PATCH] logseq 20260110 --- pages/분할정복(Divide and Conquer).md | 102 +++++++++++++++++++++++++- pages/영어기초 20강.md | 4 +- pages/👩🏻‍💻코딩 지식_팁 정리.md | 5 +- 3 files changed, 106 insertions(+), 5 deletions(-) diff --git a/pages/분할정복(Divide and Conquer).md b/pages/분할정복(Divide and Conquer).md index 831dd5c..7d356be 100644 --- a/pages/분할정복(Divide and Conquer).md +++ b/pages/분할정복(Divide and Conquer).md @@ -90,4 +90,104 @@ deck:: Logseq/coding tip # 홀수면: temp * temp * A return multiply_matrix(multiply_matrix(temp, temp, N), adj, N) - ``` \ No newline at end of file + ``` + - + - ### 2) 피보나치 수열을 행렬로 표현해서 분할정복으로 구하기 + - #### 피보나치 수열의 행렬화 + - 피보나치 수열의 점화식 $F_n = F_{n-1} + F_{n-2}$를 행렬 곱셈 형태로 변환. + - 1) 기본 점화식의 행렬화 #card + id:: 69623201-075b-4955-9d5b-aedcbcf16170 + - $$F_{n+1} = F_n + F_{n-1}$$ + $$F_n = F_{n-1} + F_{n-2}$$ + - $$ + \begin{bmatrix} F_{n+1} \\ F_n \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} F_n \\ F_{n-1} \end{bmatrix} + $$ + - 2) 재귀적으로 쭉 대입하면 최종적으로 다음과 같은 식이 나옴. #card + id:: 69622f8c-b595-40fc-83b5-7298ca660f3a + - $$ + \begin{bmatrix} F_{n+1} \\ F_n \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}^n \begin{bmatrix} F_1 \\ F_0 \end{bmatrix} + $$ + - $$ + \begin{bmatrix} F_{n+1} \\ F_n \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}^n \begin{bmatrix} 1 \\ 0 \end{bmatrix} + $$ + #+BEGIN_EXTRA + 즉 $\begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}^n$ 값의 1행 0열의 값이 $F_n$ 값이 된다. + #+END_EXTRA + - #### 결론 : $\begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}^n$ 을 계산하면 n번째 피보나치 수열의 항을 구할 수 있다. + - #### 예시문제 : n번째 피보나치 수를 1000000007 로 나눈 나머지를 출력하라.(Python) + id:: 6962333f-ebe3-43a9-bca6-96e9442286e1 + 정의할 함수는 mul_mat(m1, m2) 와 power_mat(adj, n) 이다. + 아래와 같이 코드가 주어질 때 두 함수를 정의하라. + ```python + import sys + input = sys.stdin.readline + + # 문제에서 요구하는 나누기 상수 + MOD = 1_000_000_007 + + # 1. 행렬 곱셈 함수 (2x2 고정) + def mul_mat(m1, m2): + # 행렬 곱 + + # 2. 분할 정복을 이용한 거듭제곱 + def power_mat(adj, n): + # 분할정복 + + # Main + n = int(input()) + + # 기본 행렬 [[1, 1], [1, 0]] + base_matrix = [[1, 1], [1, 0]] + + # 행렬 제곱 계산 + result_matrix = power_mat(base_matrix, n) + + # 1행 0열의 값이 n번째 값 + print(result_matrix[1][0]) + + ``` + #card + - ```python + import sys + input = sys.stdin.readline + + # 문제에서 요구하는 나누기 상수 + MOD = 1_000_000_007 + + # 1. 행렬 곱셈 함수 (2x2 고정) + def mul_mat(m1, m2): + res = [[0]*2 for _ in range(2)] + for i in range(2): + for j in range(2): + for k in range(2): + res[i][j] += m1[i][k] * m2[k][j] + res[i][j] %= MOD + return res + + # 2. 분할 정복을 이용한 거듭제곱 + def power_mat(adj, n): + if n == 1: + return [[x % MOD for x in row] for row in adj] + + temp = power_mat(adj, n // 2) + + # 짝수일 때: A^(n//2) * A^(n//2) + if n % 2 == 0: + return mul_mat(temp, temp) + # 홀수일 때: A^(n//2) * A^(n//2) * A + else: + return mul_mat(mul_mat(temp, temp), adj) + + # Main + n = int(input()) + + # 기본 행렬 [[1, 1], [1, 0]] + base_matrix = [[1, 1], [1, 0]] + + # 행렬 제곱 계산 + result_matrix = power_mat(base_matrix, n) + + # 1행 0열의 값이 n번째 값 + print(result_matrix[1][0]) + + ``` \ No newline at end of file diff --git a/pages/영어기초 20강.md b/pages/영어기초 20강.md index 62bb62c..1ce0fac 100644 --- a/pages/영어기초 20강.md +++ b/pages/영어기초 20강.md @@ -51,9 +51,9 @@ deck:: Logseq/영어 문법 - **타동사 이외에도 목적어를 가지는 품사 =** {{cloze **전치사**}} #card id:: 6867e92e-f3b8-4cd9-8a33-f3a7089f2230 extra:: **전치사 역시 목적어를 가진다.**: - - **타동사의 목적어는 동명사/부정사로 경우에 따라 다르지만 선별적으로 들어갈 수 있다. ** + - 타동사의 목적어는 동명사/부정사로 경우에 따라 다르지만 선별적으로 들어갈 수 있다. id:: 6867e964-d591-4404-9f90-05217908da45 - **그러나** {{cloze **전치사**}} **의 목적어는 오직 동명사만 가능하다!(이것이 부정사의 명사적 용법과의 사소한 차이점)** + 그러나 {{cloze **전치사**}} 의 목적어는 오직 동명사만 가능하다!(이것이 부정사의 명사적 용법과의 사소한 차이점) - ## **► 전치사의 목적어로 쓰이는 동명사** - The tool for ~~to analyze~~ the data is now available. - 전치사 뒤에는 명사가 와야하는데 준동사가 들어올 때 to부정사의 명사적 용법은 들어올 수 없고 오직 동명사만 들어와야 한다. diff --git a/pages/👩🏻‍💻코딩 지식_팁 정리.md b/pages/👩🏻‍💻코딩 지식_팁 정리.md index 2bbb804..edd5374 100644 --- a/pages/👩🏻‍💻코딩 지식_팁 정리.md +++ b/pages/👩🏻‍💻코딩 지식_팁 정리.md @@ -5,5 +5,6 @@ - [[Java]] - [[자료구조]] - [[알고리즘]] -- [[코딩문제 복습용]] -- [[코딩팁]] \ No newline at end of file +- [[코딩팁]] +- +- [[코딩문제 복습용]] \ No newline at end of file