13์ผ์ฐจ(1/20)
https://www.acmicpc.net/problem/16953
from collections import deque
def bfs(a, b):
# ํ์ (ํ์ฌ ๊ฐ, ์ฐ์ฐ ํ์)๋ก ์์ ์ํ๋ฅผ ๋ฃ์
queue = deque([(a, 1)]) # ์์ ๊ฐ a์์ ์ฐ์ฐ 1๋ฒ๋ถํฐ ์์
visited = set([a]) # ๋ฐฉ๋ฌธํ ๊ฐ๋ค์ ๊ธฐ๋กํ์ฌ ์ค๋ณต ๋ฐฉ์ง
while queue:
current, count = queue.popleft()
# 2๋ฅผ ๊ณฑํ ๊ฐ์ด B์ ๊ฐ์ผ๋ฉด ๋ฐ๋ก ๋ฐํ
if current == b:
return count
# ๋ ๊ฐ์ง ์ฐ์ฐ์ ์๋
# 1. 2๋ฅผ ๊ณฑํ๋ค.
next_value = current * 2
if next_value <= b and next_value not in visited:
visited.add(next_value)
queue.append((next_value, count + 1))
# 2. 1์ ์์ ์ค๋ฅธ์ชฝ์ ์ถ๊ฐํ๋ค.
next_value = current * 10 + 1
if next_value <= b and next_value not in visited:
visited.add(next_value)
queue.append((next_value, count + 1))
return -1 # ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ
a, b = map(int, input().split())
result = bfs(a, b)
print(result)
14์ผ์ฐจ(1/21)
DP๋ ์ ์ ๋ง ์ฐจ๋ฆฌ๋ฉด ๋๋ค.
https://www.acmicpc.net/problem/9465
t=int(input())
for _ in range(t):
n=int(input())
arr=[]
for _ in range(2):
arr.append(list(map(int,input().split())))
dp=[[0]* n for _ in range(2)]
for i in range(n):
for j in range(2):
if i == 0:
dp[j][i] = arr[j][i]
elif i == 1:
dp[j][i] = arr[j][i] + dp[1 - j][i - 1]
else:
if j==0:
dp[j][i]=arr[j][i]+max(dp[j+1][i-1],dp[j+1][i-2],dp[j][i-2])
else:
dp[j][i]=arr[j][i]+max(dp[j-1][i-1],dp[j-1][i-2],dp[j-1][i-2])
print(max(max(dp[0]),max(dp[1])))
https://www.acmicpc.net/problem/9461
t=int(input())
for _ in range(t):
n=int(input())
dp=[0]*(n+1)
for i in range(n):
if i==0 or i==1 or i==2:
dp[i]=1
else:
dp[i] = dp[i-2]+dp[i-3]
print(dp[-2])
https://www.acmicpc.net/problem/1890
n=int(input())
arr=[]
dp=[]
for _ in range(n):
arr.append(list(map(int, input().split())))
dp=[[0]* n for _ in range(n)]
dp[0][0] = 1
for i in range(n):
for j in range(n):
k=arr[i][j]
if k==0:
continue
if i+k<n:
dp[i + k][j] += dp[i][j]
if j+k<n:
dp[i][j+k] += dp[i][j]
print(dp[-1][-1])
15์ผ์ฐจ(1/22)
https://www.acmicpc.net/problem/1965
์ ํ์ ์ธ LIS๋ฌธ์
์ด๋, max(dp) != dp[-1] ์์ ์ฃผ์ํด์ผ ํ๋ค.
'''
8
1 6 2 5 7 3 5 6
dp=[1,1,1,1,1,1,1,1]
arr=[1,6,2,5,7,3,5,6]
i=1์ผ๋, j=0
dp=[1,2,1,1,1,1,1,1]
i=2์ผ๋, j=0,1
dp=[1,2,2,1,1,1,1,1]
dp=[1,2,2,1,1,1,1,1]
'''
n=int(input())
dp=[1]*n
arr =list(map(int,input().split()))
for i in range(1,n): #์๊ธฐ์์
for j in range(i):
if arr[j]<arr[i]: #๋ท ์ซ์๊ฐ ๋ ํฌ๋ฉด
if dp[i]<dp[j]+1:
dp[i]=dp[j]+1
print(max(dp))
https://www.acmicpc.net/problem/1309
ํ์คํ ์ค๋ฒ dp๋ฌธ์ ๋ ๋ฌธ์ ๊ฐ ์ฐธ dp ์ค๋ฌ์ด ๊ฒ ๊ฐ๋ค.
'''
n=0์ผ๋ 1๊ฐ์ง = 1
n=1์ผ๋ 1+2๊ฐ์ง =3
N=2์ผ๋ 1+4+2๊ฐ์ง = 7
n=3์ผ๋ 1+6+8+2๊ฐ์ง = 17
n=4์ผ๋ 1+8+18+12+2๊ฐ์ง = 41
1*2+1
3*2+1
7*2+3
17*2+7
41*2+17
์ฆ, ์ ํ์์ด dp[n]=dp[n-1]*2+dp[n-2]๊ฐ ๋์จ๋ค.
'''
n=int(input())
dp=[0]*(n+1)
for i in range(n+1):
if i==0:
dp[i]=1
elif i==1:
dp[i]=3
else:
dp[i]=2*dp[i-1]+dp[i-2]
print(dp[n]%9901)
100,000์ด๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ
๋๋จธ์ง ์ฐ์ฐ์ ๊ฐ ๋ฐฐ์ด๋ง๋ค ํด์ค์ผ, ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋ฅผ ๋ฐฉ์ง ํ ์ ์๋ค.
n=int(input())
dp=[0]*(n+1)
for i in range(n+1):
if i==0:
dp[i]=1
elif i==1:
dp[i]=3
else:
dp[i]=(2*dp[i-1]+dp[i-2])%9901
print(dp[n])
๋๋ ์ซ์๋ณด๊ณ ์ ์ถ์์ ํ์๋๋ฐ, ์์ธํ ์ ํ์์ ์๋ ๋ธ๋ก๊ทธ์ ์ ๋์์๋ค.
https://great-park.tistory.com/131
16์ผ์ฐจ(1/23)
https://www.acmicpc.net/problem/1813
๊ตญ์ด๊ฐ ๋๋ฌด ์ด๋ ค์์...
n=int(input())
arr=list(map(int,input().split()))
trues = [0]*51
#ํด๋น ๋ง์ด ๋์จ ํ์ ์
for i in arr:
trues[i]+=1
#'ํ์'์ '์ซ์'๊ฐ ๊ฐ๋ค๋ฉด, ๋ง๋๋ง
# ๊ฐ์ฅ ํฐ๊ฐ์ด๋ฏ๋ก ๋ฐ๋์์ ๋๋ฉด์ ์ ์ผ ๋จผ์ ์ค๋ 0์ด ์๋๊ฐ์ด ๋ ๊ฒ
for i in range(50,-1,-1):
if trues[i]==i:
print(i)
break
else:
print(-1)
https://www.acmicpc.net/problem/2096
๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ
n= int(input())
arr=[]
for _ in range(n):
arr.append(list(map(int,input().split())))
max_dp = [[0] * 3 for _ in range(n)]
# ์ฒซ ํ
max_dp[0][0] = arr[0][0]
max_dp[0][1] = arr[0][1]
max_dp[0][2] = arr[0][2]
# ๋ ๋ฒ์งธ ํ๋ถํฐ ๊ณ์ฐ
for i in range(1, n):
max_dp[i][0] = arr[i][0] + max(max_dp[i-1][0], max_dp[i-1][1])
max_dp[i][1] = arr[i][1] + max(max_dp[i-1][0], max_dp[i-1][1], max_dp[i-1][2])
max_dp[i][2] = arr[i][2] + max(max_dp[i-1][1], max_dp[i-1][2])
min_dp = [[0] * 3 for _ in range(n)]
# ์ฒซ ํ
min_dp[0][0] = arr[0][0]
min_dp[0][1] = arr[0][1]
min_dp[0][2] = arr[0][2]
# ๋ ๋ฒ์งธ ํ๋ถํฐ ๊ณ์ฐ
for i in range(1, n):
min_dp[i][0] = arr[i][0] + min(min_dp[i-1][0], min_dp[i-1][1])
min_dp[i][1] = arr[i][1] + min(min_dp[i-1][0], min_dp[i-1][1], min_dp[i-1][2])
min_dp[i][2] = arr[i][2] + min(min_dp[i-1][1], min_dp[i-1][2])
print(max(max_dp[n-1]), min(min_dp[n-1]))
1/17
'๐ฏ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2์ฃผ์ฐจ (0) | 2025.01.12 |
---|---|
๋ฐฑ์ค 1์ฃผ์ฐจ(2) (0) | 2025.01.08 |
๋ฐฑ์ค 1์ฃผ์ฐจ(1) (0) | 2025.01.05 |
DP (0) | 2024.06.27 |
[๋ฐฑ์ค/Python] 10844:์ฌ์ด ๊ณ๋จ ์ (0) | 2024.06.27 |