Skip to content

Commit 1aeaac0

Browse files
authored
Merge branch 'AlgorithmStudy-Allumbus:main' into main
2 parents fd5b563 + 1838c5d commit 1aeaac0

5 files changed

+154
-0
lines changed
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+
nums = list(map(int, input().split()))
5+
6+
n = len(nums)
7+
dp = [[[4*len(nums) for _ in range(5)] for _ in range(5)]
8+
for _ in range(len(nums))]
9+
dp[0][0][0] = 0 # ์ดˆ๊ธฐ๊ฐ’
10+
11+
12+
def move(start, end):
13+
if start == 0: # 0์„ ๊ฑฐ์นจ
14+
return 2
15+
if start == end: # ๊ฐ™์€ ์ง€์ 
16+
return 1
17+
if abs(start - end) % 2 == 0: # ์ง์ˆ˜์ฐจ์ด๊ฐ€ ๋‚˜๋ฉด ๋ฐ˜๋Œ€์ง€์ 
18+
return 4
19+
else:
20+
return 3
21+
22+
23+
for i in range(n-1):
24+
start = nums[i]
25+
for left in range(5):
26+
for right in range(5):
27+
dp[i+1][left][start] = min(dp[i+1][left][start], dp[i][left][right] + move(right, start))
28+
dp[i+1][start][right] = min(dp[i+1][start][right], dp[i][left][right] + move(left, start))
29+
30+
print(min(map(min, dp[n-1])))
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
n, k = map(int, input().split())
5+
coins = list((int(input()) for _ in range(n)))
6+
7+
dp = [0] * (k + 1)
8+
dp[0] = 1
9+
10+
coins.sort()
11+
12+
for c in coins:
13+
for i in range(c, k+1):
14+
dp[i] += dp[i - c]
15+
16+
print(dp[k])
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+
MAX_NUM = 100001
5+
n, k = map(int, input().split()) # ๋™์ „ ๊ฐœ์ˆ˜, ๋ชฉํ‘œ ๊ฐ€์น˜ ํ•ฉ
6+
coins = [int(input()) for _ in range(n)] # ๋™์ „์˜ ๊ฐ€์น˜ ๋ฆฌ์ŠคํŠธ
7+
coins.sort()
8+
9+
# DP ์„ ์–ธ
10+
dp = [MAX_NUM] * (k+1)
11+
dp[0] = 0
12+
13+
# DP ์ฑ„์šฐ๊ธฐ
14+
for c in coins:
15+
for i in range(c, k+1):
16+
dp[i] = min(dp[i], dp[i-c]+1)
17+
18+
# ์ •๋‹ต ์ถœ๋ ฅ
19+
if dp[k] == MAX_NUM:
20+
print(-1)
21+
else:
22+
print(dp[k])
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import sys
2+
from collections import deque
3+
input = sys.stdin.readline
4+
5+
def bfs(sx, sy, shark_size):
6+
# ๋ฐฉ๋ฌธ ๋ฐฐ์—ด๊ณผ ๊ฑฐ๋ฆฌ ๊ธฐ๋ก
7+
visited = [[-1]*n for _ in range(n)]
8+
visited[sx][sy] = 0
9+
queue = deque([(sx, sy)])
10+
fishes = [] # ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ ํ›„๋ณด๋“ค
11+
12+
while queue:
13+
x, y = queue.popleft()
14+
for dx, dy in directions:
15+
nx, ny = x + dx, y + dy
16+
# ์ƒˆ๋กœ์šด ์ขŒํ‘œ๊ฐ€ ๊ณต๊ฐ„ ๋‚ด์— ์žˆ๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
17+
if 0 <= nx < n and 0 <= ny < n and visited[nx][ny] == -1:
18+
# ์ด๋™ ๊ฐ€๋Šฅํ•œ ์นธ: ๋นˆ ์นธ์ด๊ฑฐ๋‚˜, ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ์–ด๋„ ํฌ๊ธฐ๊ฐ€ shark_size ์ดํ•˜์ธ ๊ฒฝ์šฐ
19+
if space[nx][ny] <= shark_size:
20+
visited[nx][ny] = visited[x][y] + 1
21+
# ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ: ๊ฐ’์ด 0์ด ์•„๋‹ˆ๊ณ  ์•„๊ธฐ ์ƒ์–ด ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ
22+
if 0 < space[nx][ny] < shark_size:
23+
fishes.append((visited[nx][ny], nx, ny))
24+
queue.append((nx, ny))
25+
if not fishes:
26+
return None # ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†์Œ
27+
28+
# ๋ฌธ์ œ ์กฐ๊ฑด๋Œ€๋กœ ์ •๋ ฌ: ๊ฑฐ๋ฆฌ, ํ–‰, ์—ด, ์ˆœ
29+
fishes.sort(key=lambda x: (x[0], x[1], x[2]))
30+
return fishes[0] # ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฌผ๊ณ ๊ธฐ
31+
32+
33+
n = int(input()) # ๊ณต๊ฐ„์˜ ํฌ๊ธฐ
34+
space = [] # ๊ณต๊ฐ„์˜ ์ƒํƒœ
35+
for _ in range(n):
36+
space.append(list(map(int, input().split())))
37+
38+
39+
# ์•„๊ธฐ์ƒ์–ด ์œ„์น˜ ๊ตฌํ•˜๊ธฐ
40+
sx, sy = 0, 0
41+
for i in range(n):
42+
for j in range(n):
43+
if space[i][j] == 9:
44+
sx, sy = i, j
45+
space[sx][sy] = 0 # ์•„๊ธฐ ์ƒ์–ด์˜ ์‹œ์ž‘ ์œ„์น˜๋Š” ๋นˆ ์นธ(0)์œผ๋กœ ์ฒ˜๋ฆฌ
46+
47+
# ์ดˆ๊ธฐ ์„ค์ •
48+
shark_size = 2 # ์•„๊ธฐ ์ƒ์–ด ์ดˆ๊ธฐ ํฌ๊ธฐ
49+
eaten = 0 # ๋จน์€ ๋ฌผ๊ณ ๊ธฐ ์ˆ˜
50+
time = 0 # ์ „์ฒด ์†Œ์š”์‹œ๊ฐ„
51+
directions = [(-1, 0), (0, -1), (1, 0), (0, 1)]
52+
53+
# ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ˆ˜ํ–‰
54+
while True:
55+
result = bfs(sx, sy, shark_size)
56+
if result is None: # ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†์œผ๋ฉด ์ข…๋ฃŒ
57+
break
58+
59+
dist, fx, fy = result # ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ๊ฑฐ๋ฆฌ์™€ ์œ„์น˜
60+
time += dist # ์ด๋™ ์‹œ๊ฐ„ ์ถ”๊ฐ€
61+
sx, sy = fx, fy # ์•„๊ธฐ ์ƒ์–ด ์œ„์น˜ ์ด๋™
62+
space[sx][sy] = 0 # ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์—ˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ์นธ์„ ๋นˆ ์นธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ
63+
eaten += 1# ๋จน์€ ๋ฌผ๊ณ ๊ธฐ ์ˆ˜
64+
65+
# ๋จน์€ ๋ฌผ๊ณ ๊ธฐ ์ˆ˜๊ฐ€ ํ˜„์žฌ ์•„๊ธฐ ์ƒ์–ด ํฌ๊ธฐ์™€ ๊ฐ™์œผ๋ฉด ํฌ๊ธฐ๋ฅผ 1 ์ฆ๊ฐ€
66+
if eaten == shark_size:
67+
shark_size += 1
68+
eaten = 0
69+
70+
print(time)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# ํ•˜๋…ธ์ด ํ•จ์ˆ˜
2+
def hanoi_f(one, three, n):
3+
if n == 1:
4+
print(one, three)
5+
return
6+
7+
hanoi_f(one, 6 - one - three, n - 1) # 1๋‹จ๊ณ„ (1->2)
8+
print(one, three) # 2๋‹จ๊ณ„ (๋งˆ์ง€๋ง‰์›๋ฐ˜ 1->3)
9+
hanoi_f(6 - one - three, three, n - 1) # 3๋‹จ๊ณ„ (2->3)
10+
11+
12+
# ๋ฉ”์ธ
13+
n = int(input())
14+
print(2 ** n - 1)
15+
if n <= 20:
16+
hanoi_f(1, 3, n)

0 commit comments

Comments
ย (0)