Skip to content

Commit ceca9a5

Browse files
authored
Merge pull request #188 from AlgorithmStudy-Allumbus/minjeong3
Minjeong / 4์›” 2์ฃผ์ฐจ / 4๋ฌธ์ œ
2 parents 52819e3 + 4517cea commit ceca9a5

4 files changed

+115
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
'''
5+
DP์—๋Š” ๊ธธ์ด๊ฐ€ i๊ณ  j๊ฐ€ ๋งˆ์ง€๋ง‰ ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.
6+
'''
7+
8+
N = int(input())
9+
dp = [[0 for _ in range(10)] for _ in range(N+1)]
10+
for i in range(1, 10):
11+
dp[1][i] = 1
12+
13+
for i in range(2, N+1):
14+
for j in range(10):
15+
if j == 0:
16+
dp[i][j] = dp[i-1][1]
17+
elif j == 9:
18+
dp[i][j] = dp[i-1][8]
19+
else:
20+
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]
21+
22+
print(sum(dp[N]) % 1000000000)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
# 1. ์ž…๋ ฅ
5+
N = int(input())
6+
MOD = 10**9
7+
8+
9+
# 2. DP ์ •์˜
10+
# dp[n][last_digit][bitmask]
11+
# n: ์ˆซ์ž ๊ธธ์ด, last_digit: ๋งˆ์ง€๋ง‰ ์ž๋ฆฌ ์ˆซ์ž, bitmask: ์ง€๊ธˆ๊นŒ์ง€ ์–ด๋–ค ์ˆซ์ž๋“ค์ด ๋‚˜์™”๋Š”์ง€ (๋น„ํŠธ๋งˆ์Šคํฌ)
12+
# ๋ฒ”์œ„ - n: ์ž…๋ ฅ๊ฐ’, last_digit: 0~9, bitmask: 0~1023
13+
dp = [[[0 for _ in range(1024)] for _ in range(10)] for _ in range(N+1)]
14+
15+
# 3. ์ดˆ๊ธฐ์ƒํƒœ ์„ค์ •
16+
# ๊ธธ์ด๊ฐ€ 1์ผ ๋•Œ, 0์„ ์ œ์™ธํ•˜๊ณ  1~9๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ
17+
for i in range(1, 10):
18+
dp[1][i][1 << i] = 1
19+
20+
# 4. ์ ํ™”์‹๋Œ€๋กœ DP ์ฑ„์šฐ๊ธฐ
21+
# n: N๋ฒˆ์งธ ์ˆ˜
22+
for n in range(2, N+1):
23+
# last_digit: ๋งˆ์ง€๋ง‰ ์ž๋ฆฌ ์ˆซ์ž
24+
for last_digit in range(10):
25+
# 0~9๊นŒ์ง€ ๋ชจ๋“  ์ˆ˜๋ฅผ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์ด ์žˆ์œผ๋ฏ€๋กœ ๋ฐฉ๋ฌธ์—ฌ๋ถ€๋ฅผ ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ํ†ตํ•ด ์ €์žฅ
26+
for mask in range(1024):
27+
if last_digit == 0:
28+
dp[n][last_digit][mask | (1 << last_digit)] += dp[n - 1][last_digit + 1][mask]
29+
elif last_digit == 9:
30+
dp[n][last_digit][mask | (1 << last_digit)] += dp[n - 1][last_digit - 1][mask]
31+
else:
32+
dp[n][last_digit][mask | (1 << last_digit)] += (
33+
dp[n - 1][last_digit - 1][mask] + dp[n - 1][last_digit + 1][mask]
34+
)
35+
dp[n][last_digit][mask | (1 << last_digit)] %= MOD
36+
37+
# 5. ์ •๋‹ต ๊ณ„์‚ฐ ๋ฐ ์ถœ๋ ฅ
38+
answer = 0
39+
for i in range(10):
40+
# N์ž๋ฆฌ ์ˆ˜ ์ค‘์—์„œ i๋กœ ๋๋‚˜๋Š” ์ˆ˜ ์ค‘ 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ๋‹ค ์žˆ๋Š” ์ˆ˜๋ฅผ ๋ˆ„์ ํ•ด์„œ ๋”ํ•˜๊ธฐ
41+
answer += dp[N][i][1023]
42+
43+
print(answer % MOD)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
'''
5+
์ด์นœ์ˆ˜:
6+
- 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜
7+
- 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ
8+
- 1์ด ๋‘ ๋ฒˆ ์—ฐ์†์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Œ
9+
10+
N์ด ์ฃผ์–ด์งˆ ๋•Œ, N์ž๋ฆฌ ์ด์นœ์ˆ˜์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
11+
'''
12+
13+
N = int(input())
14+
dp = [0] * (N + 1)
15+
dp[1] = 1
16+
17+
for i in range(2, N + 1):
18+
dp[i] = dp[i - 1] + dp[i - 2]
19+
20+
print(dp[N])
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
# 1. ์ž…๋ ฅ
5+
N = int(input()) # ์ขŒ์„์˜ ๊ฐœ์ˆ˜
6+
M = int(input()) # ๊ณ ์ •์„์˜ ๊ฐœ์ˆ˜
7+
vip_list = [int(input()) for _ in range(M)] # VIP ๊ณ ์ •์„ ๋ฒˆํ˜ธ ๋ฆฌ์ŠคํŠธ
8+
9+
# 2. DP ์ดˆ๊ธฐํ™”
10+
dp = [0] * (N + 1)
11+
dp[0], dp[1] = 1, 1
12+
13+
# 3. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๊ธฐ๋ฐ˜ DP ์ฑ„์šฐ๊ธฐ
14+
for i in range(2, N+1):
15+
dp[i] = dp[i-1] + dp[i-2]
16+
17+
# 4. ์ขŒ์„ ๊ตฌ๊ฐ„๋ณ„ ๊ณ„์‚ฐ
18+
answer = 1
19+
prev = 0 # ์ด์ „ VIP ์ขŒ์„ ๋ฒˆํ˜ธ
20+
21+
for vip in vip_list:
22+
section = vip - prev - 1 # VIP ์ขŒ์„ ์ „๊นŒ์ง€ ์ž์œ  ์ขŒ์„ ๊ตฌ๊ฐ„ ๊ธธ์ด
23+
answer *= dp[section] # ๊ทธ ๊ตฌ๊ฐ„์—์„œ ๊ฐ€๋Šฅํ•œ ๋ฐฐ์น˜ ์ˆ˜ ๊ณฑํ•˜๊ธฐ
24+
prev = vip # ํ˜„์žฌ VIP๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ๊ตฌ๊ฐ„ ๋‚˜๋ˆŒ ์ค€๋น„
25+
26+
# 5. ๋งˆ์ง€๋ง‰ ๊ตฌ๊ฐ„ ์ฒ˜๋ฆฌ (VIP ์ดํ›„ ๋‚จ์€ ์ขŒ์„์ด ์žˆ๋Š” ๊ฒฝ์šฐ)
27+
section = N - prev
28+
answer *= dp[section]
29+
30+
print(answer)

0 commit comments

Comments
ย (0)