From 8b782b861f6ec20b3910f9d5560b20cc96ad049e Mon Sep 17 00:00:00 2001 From: Minjeong Kim <101111603+Mingguriguri@users.noreply.github.com> Date: Sat, 12 Apr 2025 16:18:33 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[BOJ]=20#10844.=20=EC=89=AC=EC=9A=B4=20?= =?UTF-8?q?=EA=B3=84=EB=8B=A8=20=EC=88=98=20/=20=EC=8B=A4=EB=B2=841=20/=20?= =?UTF-8?q?30=EB=B6=84=20/=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...64\352\263\204\353\213\250\354\210\230.py" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "minjeong/DynamicProgramming/2025-04-07-[\353\260\261\354\244\200]-#10844-\354\211\254\354\232\264\352\263\204\353\213\250\354\210\230.py" diff --git "a/minjeong/DynamicProgramming/2025-04-07-[\353\260\261\354\244\200]-#10844-\354\211\254\354\232\264\352\263\204\353\213\250\354\210\230.py" "b/minjeong/DynamicProgramming/2025-04-07-[\353\260\261\354\244\200]-#10844-\354\211\254\354\232\264\352\263\204\353\213\250\354\210\230.py" new file mode 100644 index 00000000..4d251c12 --- /dev/null +++ "b/minjeong/DynamicProgramming/2025-04-07-[\353\260\261\354\244\200]-#10844-\354\211\254\354\232\264\352\263\204\353\213\250\354\210\230.py" @@ -0,0 +1,22 @@ +import sys +input = sys.stdin.readline + +''' +DP에는 길이가 i고 j가 마지막 수의 개수가 저장되어야 한다. +''' + +N = int(input()) +dp = [[0 for _ in range(10)] for _ in range(N+1)] +for i in range(1, 10): + dp[1][i] = 1 + +for i in range(2, N+1): + for j in range(10): + if j == 0: + dp[i][j] = dp[i-1][1] + elif j == 9: + dp[i][j] = dp[i-1][8] + else: + dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1] + +print(sum(dp[N]) % 1000000000) \ No newline at end of file From a10c57b9cd0d8f7853471bfcbcb0014654ba43ab Mon Sep 17 00:00:00 2001 From: Minjeong Kim <101111603+Mingguriguri@users.noreply.github.com> Date: Sat, 12 Apr 2025 16:19:03 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[BOJ]=20#2193.=20=EC=9D=B4=EC=B9=9C?= =?UTF-8?q?=EC=88=98=20/=20=EC=8B=A4=EB=B2=843=20/=206=EB=B6=84=20/=20?= =?UTF-8?q?=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...3-\354\235\264\354\271\234\354\210\230.py" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "minjeong/DynamicProgramming/2025-04-10-[\353\260\261\354\244\200]-#2193-\354\235\264\354\271\234\354\210\230.py" diff --git "a/minjeong/DynamicProgramming/2025-04-10-[\353\260\261\354\244\200]-#2193-\354\235\264\354\271\234\354\210\230.py" "b/minjeong/DynamicProgramming/2025-04-10-[\353\260\261\354\244\200]-#2193-\354\235\264\354\271\234\354\210\230.py" new file mode 100644 index 00000000..847e161d --- /dev/null +++ "b/minjeong/DynamicProgramming/2025-04-10-[\353\260\261\354\244\200]-#2193-\354\235\264\354\271\234\354\210\230.py" @@ -0,0 +1,20 @@ +import sys +input = sys.stdin.readline + +''' +이친수: +- 0과 1로 이루어진 수 +- 0으로 시작하지 않음 +- 1이 두 번 연속으로 나타나지 않음 + +N이 주어질 때, N자리 이친수의 개수 구하기 +''' + +N = int(input()) +dp = [0] * (N + 1) +dp[1] = 1 + +for i in range(2, N + 1): + dp[i] = dp[i - 1] + dp[i - 2] + +print(dp[N]) From 15c0cec540381b3dc78c821138de8a3892c8dc27 Mon Sep 17 00:00:00 2001 From: Minjeong Kim <101111603+Mingguriguri@users.noreply.github.com> Date: Sat, 12 Apr 2025 16:19:30 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[BOJ]=20#1562.=20=EA=B3=84=EB=8B=A8?= =?UTF-8?q?=EC=88=98=20/=20=EA=B3=A8=EB=93=9C1=20/=2050=EB=B6=84=20/=20?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...2-\352\263\204\353\213\250\354\210\230.py" | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 "minjeong/DynamicProgramming/2025-04-09-[\353\260\261\354\244\200]-#1562-\352\263\204\353\213\250\354\210\230.py" diff --git "a/minjeong/DynamicProgramming/2025-04-09-[\353\260\261\354\244\200]-#1562-\352\263\204\353\213\250\354\210\230.py" "b/minjeong/DynamicProgramming/2025-04-09-[\353\260\261\354\244\200]-#1562-\352\263\204\353\213\250\354\210\230.py" new file mode 100644 index 00000000..2e54e9f7 --- /dev/null +++ "b/minjeong/DynamicProgramming/2025-04-09-[\353\260\261\354\244\200]-#1562-\352\263\204\353\213\250\354\210\230.py" @@ -0,0 +1,43 @@ +import sys +input = sys.stdin.readline + +# 1. 입력 +N = int(input()) +MOD = 10**9 + + +# 2. DP 정의 +# dp[n][last_digit][bitmask] +# n: 숫자 길이, last_digit: 마지막 자리 숫자, bitmask: 지금까지 어떤 숫자들이 나왔는지 (비트마스크) +# 범위 - n: 입력값, last_digit: 0~9, bitmask: 0~1023 +dp = [[[0 for _ in range(1024)] for _ in range(10)] for _ in range(N+1)] + +# 3. 초기상태 설정 +# 길이가 1일 때, 0을 제외하고 1~9로 시작할 수 있음 +for i in range(1, 10): + dp[1][i][1 << i] = 1 + +# 4. 점화식대로 DP 채우기 +# n: N번째 수 +for n in range(2, N+1): + # last_digit: 마지막 자리 숫자 + for last_digit in range(10): + # 0~9까지 모든 수를 방문해야 한다는 조건이 있으므로 방문여부를 비트마스킹을 통해 저장 + for mask in range(1024): + if last_digit == 0: + dp[n][last_digit][mask | (1 << last_digit)] += dp[n - 1][last_digit + 1][mask] + elif last_digit == 9: + dp[n][last_digit][mask | (1 << last_digit)] += dp[n - 1][last_digit - 1][mask] + else: + dp[n][last_digit][mask | (1 << last_digit)] += ( + dp[n - 1][last_digit - 1][mask] + dp[n - 1][last_digit + 1][mask] + ) + dp[n][last_digit][mask | (1 << last_digit)] %= MOD + +# 5. 정답 계산 및 출력 +answer = 0 +for i in range(10): + # N자리 수 중에서 i로 끝나는 수 중 0부터 9까지 다 있는 수를 누적해서 더하기 + answer += dp[N][i][1023] + +print(answer % MOD) From 4517cea1dbaa907ba5cbfb5bb3f01fa980db9194 Mon Sep 17 00:00:00 2001 From: Minjeong Kim <101111603+Mingguriguri@users.noreply.github.com> Date: Sat, 12 Apr 2025 23:10:50 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[BOJ]=20#2302.=20=EA=B7=B9=EC=9E=A5=20?= =?UTF-8?q?=EC=A2=8C=EC=84=9D=20/=20=EC=8B=A4=EB=B2=841=20/=2059=EB=B6=84?= =?UTF-8?q?=20/=20=ED=9E=8C=ED=8A=B8,=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...71\354\236\245\354\242\214\354\204\235.py" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "minjeong/DynamicProgramming/2025-04-12-[\353\260\261\354\244\200]-#2302-\352\267\271\354\236\245\354\242\214\354\204\235.py" diff --git "a/minjeong/DynamicProgramming/2025-04-12-[\353\260\261\354\244\200]-#2302-\352\267\271\354\236\245\354\242\214\354\204\235.py" "b/minjeong/DynamicProgramming/2025-04-12-[\353\260\261\354\244\200]-#2302-\352\267\271\354\236\245\354\242\214\354\204\235.py" new file mode 100644 index 00000000..af9ebd8f --- /dev/null +++ "b/minjeong/DynamicProgramming/2025-04-12-[\353\260\261\354\244\200]-#2302-\352\267\271\354\236\245\354\242\214\354\204\235.py" @@ -0,0 +1,30 @@ +import sys +input = sys.stdin.readline + +# 1. 입력 +N = int(input()) # 좌석의 개수 +M = int(input()) # 고정석의 개수 +vip_list = [int(input()) for _ in range(M)] # VIP 고정석 번호 리스트 + +# 2. DP 초기화 +dp = [0] * (N + 1) +dp[0], dp[1] = 1, 1 + +# 3. 피보나치 수열 기반 DP 채우기 +for i in range(2, N+1): + dp[i] = dp[i-1] + dp[i-2] + +# 4. 좌석 구간별 계산 +answer = 1 +prev = 0 # 이전 VIP 좌석 번호 + +for vip in vip_list: + section = vip - prev - 1 # VIP 좌석 전까지 자유 좌석 구간 길이 + answer *= dp[section] # 그 구간에서 가능한 배치 수 곱하기 + prev = vip # 현재 VIP를 기준으로 다음 구간 나눌 준비 + +# 5. 마지막 구간 처리 (VIP 이후 남은 좌석이 있는 경우) +section = N - prev +answer *= dp[section] + +print(answer) \ No newline at end of file