Skip to content

Commit

Permalink
2024-07-06 17:26:07
Browse files Browse the repository at this point in the history
Affected files:
.obsidian/workspace.json
src/content/blog/boj-1309-동물원.md
  • Loading branch information
gyunseo committed Jul 6, 2024
1 parent 960c738 commit 8a50871
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 9 deletions.
18 changes: 9 additions & 9 deletions .obsidian/workspace.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,16 @@
]
},
{
"id": "44994a6aa79bf7e6",
"id": "932958f597546de7",
"type": "tabs",
"children": [
{
"id": "e497ed46ee466b84",
"id": "a847079fc4a2b861",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "src/content/blog/leet-code-438-find-all-anagrams-in-a-string.md",
"file": "src/content/blog/boj-1309-동물원.md",
"mode": "source",
"source": false
}
Expand Down Expand Up @@ -103,7 +103,7 @@
"state": {
"type": "backlink",
"state": {
"file": "src/content/blog/leet-code-438-find-all-anagrams-in-a-string.md",
"file": "src/content/blog/boj-1309-동물원.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
Expand All @@ -120,7 +120,7 @@
"state": {
"type": "outgoing-link",
"state": {
"file": "src/content/blog/leet-code-438-find-all-anagrams-in-a-string.md",
"file": "src/content/blog/boj-1309-동물원.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
}
Expand All @@ -143,7 +143,7 @@
"state": {
"type": "outline",
"state": {
"file": "src/content/blog/leet-code-438-find-all-anagrams-in-a-string.md"
"file": "src/content/blog/boj-1309-동물원.md"
}
}
}
Expand All @@ -166,9 +166,10 @@
"table-editor-obsidian:Advanced Tables Toolbar": false
}
},
"active": "e497ed46ee466b84",
"active": "a847079fc4a2b861",
"lastOpenFiles": [
"src/content/blog/leet-code-1438-longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit.md",
"src/content/blog/boj-1309-동물원.md",
"src/content/blog/leet-code-438-find-all-anagrams-in-a-string.md",
"src/content/blog/boj-10159-저울.md",
"src/content/blog/leet-code-64-minimum-path-sum.md",
Expand Down Expand Up @@ -212,7 +213,6 @@
"src/content/blog/boj-15664-N과-M-(10).md",
"src/content/blog/boj-15663-N과-M-(9).md",
"src/content/blog/boj-11728-배열-합치기.md",
"src/content/blog/boj-10819-차이를-최대로.md",
"src/content/blog/boj-2230-수-고르기.md"
"src/content/blog/boj-10819-차이를-최대로.md"
]
}
61 changes: 61 additions & 0 deletions src/content/blog/boj-1309-동물원.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
author: Gyunseo Lee
title: Hello, World!
pubDatetime: 2024-07-06T17:16:00+09:00
modDatetime: 2024-07-06T17:16:00+09:00
featured: false
draft: false
tags:
- PS
- BOJ
- Algorithms
- DP
description: 개수를 세다가 이전에 세었던 걸 다시 이용하면 DP를 의심해 보자
ogImage: ""
---

## Table of contents

## 들어가며

걸린 시간: 24분

처음 문제를 읽고, 사자를 우리에 가두는 경우의 수를 태블릿에 그려 가면서 세어 봤습니다.
세다 보니 이전에 미리 세었던 가지수가 새로 가지수를 셀 때 필요가 하더이다...
그래서 DP로 접근을 했습니다.
키보드에 먼저 손을 올리기 보다는 규칙을 찾고, 점화식을 세우기 시작했습니다.

## 접근

![](https://res.cloudinary.com/gyunseo-blog/image/upload/f_auto/v1720254092/image_naizbz.png)
점화식은 위의 필기에 나온 대로 였습니다.
0은 세로 길이가 n인 우리에서 그 어떤 곳에도 사자를 집어 넣지 않을 때의 경우의 수를 나타내는 dp 테이블의 column입니다.
dp(n, k): 세로 길이가 n인 우리에서 가로 길이가 k인 우리에 사자를 넣는 경우의 수 (단, k가 0이면 세로 길이가 n인 우리들 중에 그 어떤 곳에도 사자를 넣지 않는 경우의 수)
그래서 해당 점화식을 기반으로 구현을 했습니다.

## 구현

```python
import sys

input = sys.stdin.readline

if __name__ == "__main__":
MOD = 9901
N = int(input().strip())
dp = [[0 for __ in range(3)] for _ in range(N + 1)]
dp[1][0] = dp[1][1] = dp[1][2] = 1
for i in range(2, N + 1):
dp[i][0] = sum(dp[i - 1])
dp[i][0] %= MOD
for j in range(1, 2 + 1):
dp[i][j] = dp[i - 1][0] % MOD + dp[i - 1][3 - j] % MOD
dp[i][j] %= MOD

print(sum(dp[N]) % MOD)

```

처음에 MOD로 나눠주는 것을 까먹어서, 메모리 초과를 판정 받았습니다.
![](https://res.cloudinary.com/gyunseo-blog/image/upload/f_auto/v1720254285/image_cjndxv.png)
그제서야 바로 MOD로 나눠주는 게 기억이 나서 나눠주고 AC를 받았습니다.

0 comments on commit 8a50871

Please sign in to comment.