์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ์น๊ฐ๋ฐ
- ์ดํญ๊ณ์
- ์๋ฃ๊ตฌ์กฐ
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฑ์๋
- ๋ฆฌ์กํธ๋ค์ดํฐ๋ธ
- SSE
- spring
- ๊ทธ๋ฆฌ๋
- ์คํ๋ง
- ๋ฐฑ์ค
- ํ๋ก ํธ์ค๋
- ์ฝ๋ฉํ ์คํธ
- ํ๋ก๊ทธ๋๋ฐ
- ์ปด๊ณต์
- ์ฐ์ ์์ํ
- ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ
- ๋ฐฑ์คํ์ด
- ํ์ด์ฌ
- ๋ฐฑ์ค1436
- ๊ฐ๋ฐ์
- ๋จ์ํ ์คํธ
- boj11653
- ์ปดํจํฐ๊ณตํ
- ๋ฆฌ์กํธ
- ChatGPT
- ์น๊ฐ๋ฐ๊ธฐ๋ก
- ๋ชจ๋ฐ์ผ์ฑํ๋ก๊ทธ๋๋ฐ
- ์ฝ๋ฉ
- ์ปด๊ณต
- Today
- Total
๐ป๐ญ๐ง๐
BOJ 10775 : ๊ณตํญ (Python) ๋ณธ๋ฌธ
๋ฌธ์
https://www.acmicpc.net/problem/10775
10775๋ฒ: ๊ณตํญ
์์ 1 : [2][?][?][1] ํํ๋ก ๋ํน์ํฌ ์ ์๋ค. 3๋ฒ์งธ ๋นํ๊ธฐ๋ ๋ํน์ํฌ ์ ์๋ค. ์์ 2 : [1][2][3][?] ํํ๋ก ๋ํน ์ํฌ ์ ์๊ณ , 4๋ฒ์งธ ๋นํ๊ธฐ๋ ์ ๋ ๋ํน ์ํฌ ์ ์์ด์ ์ดํ ์ถ๊ฐ์ ์ธ ๋ํน์ ๋ถ
www.acmicpc.net
์ฝ๋
import sys
input = sys.stdin.readline
def find_parent(x):
if parent[x] == x:
return x
P = find_parent(parent[x])
parent[x] = P
return parent[x]
def union(x, y):
x = find_parent(x)
y = find_parent(y)
if x < y:
parent[y] = x
else:
parent[x] = y
G = int(input())
P = int(input())
parent = {i: i for i in range(0, G+1)}
planes = []
count = 0
for _ in range(P):
planes.append(int(input()))
for plane in planes:
x = find_parent(plane)
if x == 0:
break
union(x, x-1)
count += 1
print(count)
ํ์ด
2์ค ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ union-find๋ฅผ ์ฌ์ฉํด ํ์๋ค. (2์ค ๋ฐ๋ณต๋ฌธ ์ฝ๋๋ ์๋์)
1. find_parent(x)
def find_parent(x):
if parent[x] == x:
return x
P = find_parent(parent[x])
parent[x] = P
return parent[x]
ํด๋น ์์์ ๋ถ๋ชจ๋ฅผ ์ฐพ๋ ํจ์๋ก ์ฌ๊ท๋ฅผ ์ด์ฉํ๋ค.
2. union(x,y)
def union(x, y):
x = find_parent(x)
y = find_parent(y)
if x < y:
parent[y] = x
else:
parent[x] = y
x, y ๋ชจ๋ ๋ถ๋ชจ ์์๋ฅผ ์ฐพ์์ ๋ ์ค ๋ ์์ ๋ถ๋ชจ ์์๋ฅผ ๋ฐ๋ผ๊ฐ๋ค. โ ๋์ ๋ถ๋ชจ ์์๊ฐ ๊ฐ์์ง๋ค == ๊ฐ์ ํฉ์งํฉ
์... ๋จธ๋ฆฌ๋ก๋ ์ดํด๊ฐ ๋๋ ๋ฏ ํ๋ฐ ๋ง๋ก ์ค๋ช ์ ๋ชปํ๊ฒ ๋ค.. ๊ทธ๋ผ ์ ์ดํด๋ฅผ ๋ํ๊ฑฐ๊ฒ ์ฃ ...
๊ธฐํ
์ฐ์ ์ ์ฝ๋๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋์ ํ๋ฆฐ ์ฝ๋์ด๋ ์๋ง ๋ต์ ์ถ๋ ฅํ๋๋ฐ๋ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ด๋ค.
i ๋ฒ์งธ ๋นํ๊ธฐ๋ 1๋ฒ๋ถํฐ gi ๋ฒ์งธ ๊ฒ์ดํธ ์ค ํ๋์ ์๊ตฌ์ ์ผ๋ก ๋ํนํ ์ ์๋ค. ๊ฐ๋ฅํ ๊ฒ์ดํธ์ ์๊ฐ ์ ์ ๋นํ๊ธฐ๋ค(gi๊ฐ ์์์๋ก ๊ฒ์ดํธ์ ๋ฒ์๊ฐ ์์์ง๋ฏ๋ก ๊ฐ๋ฅํ ๊ฒ์ดํธ์ ์๊ฐ ์ค์ด๋ ๋ค.) ์ด ์ ์ชฝ ๊ฒ์ดํธ์ ๋ํนํ ์ ์๋๋ก ์๋ณดํ๊ธฐ ์ํด์ ๋นํ๊ธฐ๋ gi๋ฒ์งธ ๊ฒ์ดํธ๋ถํฐ ์์ํด์ 1๋ฒ์งธ ๊ฒ์ดํธ๋ก ์ด๋ํ๋ฉด์ ๋ํน์ด ๊ฐ๋ฅํ์ง ์ฒดํฌํ ํ ๋ํนํ ์ ์๋๋ก ํ๋ค.
check ๋ฐฐ์ด์ ์ด์ฉํด์ ๊ฒ์ดํธ๊ฐ ์์ง ๋ํน๋์ง ์์ ์ํ๋ผ๋ฉด 0์ผ๋ก ํ์ํ๋ค.
๋ํน์ ์ํ ์์
check ๋ฐฐ์ด์ ์์๊ฐ 0 ์ด๋ผ๋ฉด ์์๋ฅผ 1๋ก ๋ฐ๊พธ๊ณ (๋ํน๋์๋ค๋ ํ์) result ๊ฐ์ 1์ฆ๊ฐํ ํ์ ๋ค์ ๋นํ๊ธฐ๋ก ๋์ด๊ฐ๋ค.
check ๋ฐฐ์ด์ ์์๊ฐ 1์ด๋ผ๋ฉด ์ซ์๊ฐ ๋ ์์ ์ผ์ชฝ ๊ฒ์ดํธ๋ก ์ด๋ํ์ฌ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
if maximum == 0:
break
maximum ์ด 0์ด ๋ ๋๊น์ง, ์ฆ gi๋ฒ์งธ๋ถํฐ ์ฒดํฌํ ๋ชจ๋ ๊ฒ์ดํธ๊ฐ ๋ํน์ด ๋ผ์๋ค๋ฉด ๊ณตํญ์ ํ์๋๋ฏ๋ก ๋ฐ๋ณต๋ฌธ์ ์ข ๋ฃํ๊ณ ๊ฐ์ ์ถ๋ ฅํ๋ค.
์ฝ๋
import sys
input = sys.stdin.readline
G = int(input())
P = int(input())
gate = [0] * P
check = [0] *(G+1)
for i in range(P):
gate[i] = int(input())
result = 0
for i in range(P):
maximum = gate[i]
while maximum != 0:
if check[maximum] == 0:
check[maximum] = 1
result += 1
break
maximum -= 1
if maximum == 0:
break
print(result)์ ๋ค์ ๋นํ๊ธฐ๋ก ๋์ด๊ฐ๋ค.
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 2178: ๋ฏธ๋ก ํ์ (Python) (1) | 2023.03.14 |
---|---|
BOJ 1926 : ๊ทธ๋ฆผ (Python) (0) | 2023.03.13 |
BOJ 1781 : ์ปต๋ผ๋ฉด (Python) (0) | 2023.02.28 |
BOJ 2437 : ์ ์ธ (Python) (2) | 2023.02.28 |
BOJ 1339 : ๋จ์ด ์ํ (Python) (0) | 2023.02.20 |