Skip to content

Commit 1eb63e3

Browse files
authored
Merge pull request #99 from learntosurf/main
Learntosurf / 11์›” 5์ฃผ์ฐจ / 7๋ฌธ์ œ
2 parents e1bfa9d + 1190994 commit 1eb63e3

7 files changed

+155
-0
lines changed
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+
N, K = map(int, input().split()) # ๋ฌผํ’ˆ์˜ ๊ฐœ์ˆ˜, ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ
5+
6+
items = []
7+
for _ in range(N):
8+
W, V = map(int, input().split())
9+
items.append((W, V)) # (๋ฌผ๊ฑด์˜ ๊ฐœ์ˆ˜, ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜)
10+
11+
def backpack(N, K, items):
12+
dp = [0] * (K+1) # ๋ฐฐ๋‚ญ ํฌ๊ธฐ๋งŒํผ DP ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
13+
14+
for weight, value in items:
15+
for w in range(K, weight-1, -1): # ์—ญ์ˆœ์œผ๋กœ ๋ฐ˜๋ณต
16+
dp[w] = max(dp[w], dp[w-weight] + value)
17+
18+
return dp[K]
19+
20+
print(backpack(N, K, items))
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
n = int(input())
2+
3+
def fibonacci(n):
4+
dp = [0] * (n+1)
5+
6+
dp[0] = 0
7+
dp[1] = 1
8+
9+
for i in range(2, n+1):
10+
dp[i] = dp[i-1] + dp[i-2]
11+
12+
return dp[n]
13+
14+
print(fibonacci(n))
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
N = int(input())
2+
3+
def operation(N):
4+
dp = [0] * (N+1)
5+
6+
for i in range(2, N+1): # 1์€ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ
7+
dp[i] = dp[i-1] + 1
8+
9+
if i%2==0:
10+
dp[i] = min(dp[i], dp[i//2]+1)
11+
12+
if i%3==0:
13+
dp[i] = min(dp[i], dp[i//3]+1)
14+
15+
return dp[N]
16+
17+
print(operation(N))
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N = int(input())
5+
stair = [int(input()) for _ in range(N)]
6+
7+
# N์— ๋”ฐ๋ฅธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
8+
if N == 1:
9+
print(stair[0])
10+
exit()
11+
12+
if N == 2:
13+
print(stair[0] + stair[1])
14+
exit()
15+
16+
dp = [0] * (N+1)
17+
dp[0] = stair[0]
18+
dp[1] = stair[0] + stair[1]
19+
dp[2] = max(stair[0] + stair[2], stair[1] + stair[2])
20+
21+
for i in range(3, N):
22+
dp[i] = max(dp[i-2] + stair[i], dp[i-3] + stair[i-1] + stair[i])
23+
24+
print(dp[N-1])
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import sys
2+
input = sys.stdin.readline
3+
INF = sys.maxsize
4+
5+
N = int(input())
6+
blocks = input().split()
7+
8+
dp = [INF] * N
9+
dp[0] = 0 # 1๋ฒˆ ๋ธ”๋ก์—์„œ ์ถœ๋ฐœ
10+
11+
for i in range(1, N): # ๋ชฉํ‘œ ๋ธ”๋ก (1๋ฒˆ ๋ธ”๋ก ์ดํ›„๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€)
12+
for j in range(i): # ์ด์ „ ๋ธ”๋ก๋“ค (0๋ฒˆ๋ถ€ํ„ฐ i-1๋ฒˆ๊นŒ์ง€ ํƒ์ƒ‰)
13+
if blocks[j] == 'B' and blocks[i] != 'O':
14+
continue
15+
elif blocks[j] == 'O' and blocks[i] != 'J':
16+
continue
17+
elif blocks[j] == 'J' and blocks[i] != 'B':
18+
continue
19+
dp[i] = min(dp[i], dp[j] + (i-j)**2)
20+
21+
if dp[-1] == INF:
22+
print(-1)
23+
else:
24+
print(dp[-1])
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N,S,M = map(int,input().split())
5+
V = list(map(int,input().split()))
6+
7+
dp = [[0]*(M+1) for _ in range(N+1)]
8+
dp[0][S] = 1 # ์‹œ์ž‘ ๋ณผ๋ฅจ์„ ์„ค์ •
9+
10+
for i in range(1, N+1): # ๊ฐ ๊ณก์— ๋Œ€ํ•ด
11+
for j in range(M+1): # ๊ฐ€๋Šฅํ•œ ๋ณผ๋ฅจ์— ๋Œ€ํ•ด
12+
if dp[i-1][j] != 0: # ์ด์ „ ๊ณก์—์„œ ํ•ด๋‹น ๋ณผ๋ฅจ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด
13+
if 0 <= j + V[i-1] <= M: # ๋ณผ๋ฅจ์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋ฉด
14+
dp[i][j + V[i-1]] = 1
15+
if 0 <= j - V[i-1] <= M: # ๋ณผ๋ฅจ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค๋ฉด
16+
dp[i][j-V[i-1]] = 1
17+
volume = -1
18+
for i in range(M, -1, -1): # ์ตœ๋Œ€ ๋ณผ๋ฅจ๋ถ€ํ„ฐ ํƒ์ƒ‰
19+
if dp[N][i] == 1: # ๊ฐ€๋Šฅํ•œ ๋ณผ๋ฅจ์„ ์ฐพ์œผ๋ฉด
20+
volume = i
21+
break
22+
23+
print(volume)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from collections import defaultdict, deque
2+
import sys
3+
input = sys.stdin.readline
4+
5+
N, M = map(int, input().split()) # ์ •์ ์˜ ๊ฐœ์ˆ˜, ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜
6+
graph = [[] for _ in range(N + 1)]
7+
for _ in range(M):
8+
u, v = map(int, input().split())
9+
graph[u].append(v)
10+
graph[v].append(u)
11+
12+
# ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
13+
visited = [False] * (N + 1)
14+
15+
# ์—ฐ๊ฒฐ ์š”์†Œ ๊ฐœ์ˆ˜
16+
connected_components = 0
17+
18+
def bfs(graph, start):
19+
queue = deque([start]) # ์‹œ์ž‘ ์ •์ ์„ ํ์— ์ถ”๊ฐ€
20+
visited[start] = True # ์‹œ์ž‘ ์ •์ ์„ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
21+
while queue:
22+
current = queue.popleft() # ํ์—์„œ ์ •์  ๊บผ๋‚ด๊ธฐ
23+
for neighbor in graph[current]: # ํ˜„์žฌ ์ •์ ์˜ ๋ชจ๋“  ์ด์›ƒ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต
24+
if not visited[neighbor]: # ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋งŒ ์ฒ˜๋ฆฌ
25+
visited[neighbor] = True # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
26+
queue.append(neighbor) # ํ์— ์ถ”๊ฐ€
27+
28+
for i in range(1, N+1):
29+
if not visited[i]: # ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ์—์„œ BFS ์ˆ˜ํ–‰
30+
bfs(graph, i)
31+
connected_components += 1
32+
33+
print(connected_components)

0 commit comments

Comments
ย (0)