Skip to content

Commit fe2fc65

Browse files
committed
Update Study_Week14_DP_BOJ_2342_DanceDanceRevolution
1 parent 2455232 commit fe2fc65

File tree

4 files changed

+103
-0
lines changed

4 files changed

+103
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'''
2+
BOJ #1717. μ§‘ν•©μ˜ ν‘œν˜„ (κ³¨λ“œ5)
3+
https://www.acmicpc.net/problem/1717
4+
μœ ν˜•: Union-Find, Graph
5+
'''
6+
7+
import sys
8+
sys.setrecursionlimit(10 ** 6) # μž¬κ·€ 깊이 μ œν•œ 늘리기
9+
input = sys.stdin.readline
10+
11+
# Union μ—°μ‚°(두 집합을 ν•©μΉ˜κΈ° μœ„ν•œ ν•¨μˆ˜)
12+
def union(a, b):
13+
p_a = find(a)
14+
p_b = find(b)
15+
16+
if p_a > p_b: # 값이 더 μž‘μ€ μͺ½μ„ λΆ€λͺ¨λ‘œ μ„€μ •
17+
parent[p_a] = p_b
18+
else:
19+
parent[p_b] = p_a
20+
21+
# Find μ—°μ‚°(같은 집합에 μ†ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•œ ν•¨μˆ˜)
22+
def find(a):
23+
if a != parent[a]:
24+
parent[a] = find(parent[a]) # 경둜 μ••μΆ•
25+
return parent[a]
26+
27+
# μ—°μ‚° μˆ˜ν–‰
28+
n, m = map(int, input().split())
29+
parent = [i for i in range(n + 1)] # 초기: 각 μ›μ†Œκ°€ 자기 μžμ‹ μ„ λΆ€λͺ¨λ‘œ 가짐
30+
31+
for _ in range(m):
32+
flag, a, b = map(int, input().split())
33+
if flag == 0: # ν•©μ§‘ν•© μ—°μ‚°
34+
union(a, b)
35+
else: # 같은 μ§‘ν•© 확인 μ—°μ‚°
36+
if find(a) == find(b):
37+
print("YES")
38+
else:
39+
print("NO")
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
## πŸš€3μ›” 2μ£Όμ°¨ (3/10) μŠ€ν„°λ”” 발제 주제: Dynamic programming
2+
> 발제자: 김홍주
3+
4+
> 주제: Dynamic programming
5+
### πŸ—‚οΈ μŠ€ν„°λ”” 자료
6+
- PDF: [λ°”λ‘œκ°€κΈ°
7+
](./Study_BOJ_2294.pdf)
8+
9+
10+
### πŸ“– 문제
11+
- [λ°±μ€€ #2342. Dance Dance Revolution](https://www.acmicpc.net/problem/2342): Dynamic Programming / κ³¨λ“œ3
12+
- μ •λ‹΅ μ½”λ“œ: [Study_BOJ_2342_DanceDanceRevolution.py](./Study_BOJ_2342_DanceDanceRevolution)
13+
14+
### πŸ’» 과제
15+
- [λ°±μ€€ #2281. λ°μŠ€λ…ΈνŠΈ](https://www.acmicpc.net/problem/2281): Dynamic Programming / κ³¨λ“œ4
16+
- μ •λ‹΅ μ½”λ“œ: [Assignment_BOJ_2281_λ°μŠ€λ…ΈνŠΈ.py](./Assignment_BOJ_2281_λ°μŠ€λ…ΈνŠΈ.py)
495 KB
Binary file not shown.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
'''
2+
BOJ #1976. μ—¬ν–‰ κ°€μž (κ³¨λ“œ4)
3+
https://www.acmicpc.net/problem/1976
4+
μœ ν˜•: Union-Find, Graph
5+
'''
6+
import sys
7+
sys.setrecursionlimit(10 ** 8)
8+
input = sys.stdin.readline
9+
10+
def union(a, b):
11+
p_a = find(a)
12+
p_b = find(b)
13+
14+
if p_a > p_b: # a의 λŒ€ν‘œλ³΄λ‹€ b의 λŒ€ν‘œκ°€ 더 μž‘μ€ 값을 κ°€μ§€λ©΄,
15+
parent[p_a] = p_b # aκ°€ μ†ν•œ 집합을 b의 집합에 ν•©μΉ˜κΈ°
16+
else:
17+
parent[p_b] = p_a # κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ b의 집합을 a의 집합에 ν•©μΉ˜κΈ°
18+
19+
def find(a):
20+
if a == parent[a]: # aκ°€ 자기 μžμ‹ μ˜ λΆ€λͺ¨μ΄λ©΄ λŒ€ν‘œ λ…Έλ“œ
21+
return a
22+
23+
parent[a] = find(parent[a]) # 경둜 압좕을 톡해 a의 λΆ€λͺ¨λ₯Ό λŒ€ν‘œ λ…Έλ“œλ‘œ μž¬μ„€μ •
24+
return parent[a]
25+
26+
# λ„μ‹œμ˜ 개수 nκ³Ό μ—¬ν–‰ κ³„νšμ— ν¬ν•¨λœ λ„μ‹œμ˜ 수 m을 μž…λ ₯λ°›κΈ°
27+
n = int(input())
28+
m = int(input())
29+
30+
parent = [i for i in range(n)] # 각 λ„μ‹œλŠ” μ²˜μŒμ— 자기 μžμ‹ μ΄ λŒ€ν‘œ λ…Έλ“œ.
31+
32+
# n개의 쀄에 걸쳐 λ„μ‹œ κ°„ μ—°κ²° 정보λ₯Ό μž…λ ₯λ°›κ³ , μ—°κ²°λ˜μ–΄ 있으면 union μ—°μ‚° μˆ˜ν–‰
33+
for i in range(n):
34+
arr = list(map(int, input().split()))
35+
for j in range(n):
36+
if arr[j]: # 1이면 i와 jκ°€ μ—°κ²°λ˜μ–΄ μžˆμœΌλ―€λ‘œ union μ—°μ‚° μˆ˜ν–‰
37+
union(i, j)
38+
39+
# μ—¬ν–‰ κ³„νšμ„ μž…λ ₯λ°›λŠ”λ‹€.
40+
plan = list(map(int, input().split()))
41+
result = "YES"
42+
# μ—¬ν–‰ κ³„νšμ— μžˆλŠ” λͺ¨λ“  λ„μ‹œκ°€ 같은 μ§‘ν•©(λŒ€ν‘œ λ…Έλ“œ)을 κ°€μ§€λŠ”μ§€ 확인
43+
for i in range(1, m):
44+
if parent[plan[i]-1] != parent[plan[0]-1]:
45+
result = "NO"
46+
break
47+
48+
print(result)

0 commit comments

Comments
Β (0)