π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[BAEKJOON python] 16234_μΈκ΅¬ μ΄λ λ³Έλ¬Έ
728x90
λ°μν
N×Nν¬κΈ°μ λ μ΄ μκ³ , λ μ 1×1κ°μ μΉΈμΌλ‘ λλμ΄μ Έ μλ€.κ°κ°μ λ μλ λλΌκ° νλμ© μ‘΄μ¬νλ©°, rν cμ΄μ μλ λλΌμλ A[r][c]λͺ μ΄ μ΄κ³ μλ€μΈμ ν λλΌ μ¬μ΄μλ κ΅κ²½μ μ΄ μ‘΄μ¬νλ€.λͺ¨λ λλΌλ 1×1 ν¬κΈ°μ΄κΈ° λλ¬Έμ, λͺ¨λ κ΅κ²½μ μ μ μ¬κ°ν ννμ΄λ€.
μΈκ΅¬ μ΄λμ ν루 λμ λ€μκ³Ό κ°μ΄ μ§νλκ³ ,λ μ΄μ μλ λ°©λ²μ μν΄ μΈκ΅¬ μ΄λμ΄ μμ λκΉμ§ μ§μλλ€.κ΅κ²½μ μ 곡μ νλ λ λλΌμ μΈκ΅¬ μ°¨μ΄κ° Lλͺ μ΄μ, Rλͺ μ΄νλΌλ©΄,λ λλΌκ° 곡μ νλ κ΅κ²½μ μ μ€λ ν루 λμ μ°λ€.μμ 쑰건μ μν΄ μ΄μ΄μΌνλ κ΅κ²½μ μ΄ λͺ¨λ μ΄λ Έλ€λ©΄, μΈκ΅¬ μ΄λμ μμνλ€κ΅κ²½μ μ΄ μ΄λ €μμ΄ μΈμ ν μΉΈλ§μ μ΄μ©ν΄ μ΄λν μ μμΌλ©΄,κ·Έ λλΌλ₯Ό μ€λ ν루 λμμ μ°ν©μ΄λΌκ³ νλ€.μ°ν©μ μ΄λ£¨κ³ μλ κ° μΉΈμ μΈκ΅¬μλ (μ°ν©μ μΈκ΅¬μ) / (μ°ν©μ μ΄λ£¨κ³ μλ μΉΈμ κ°μ)νΈμμ μμμ μ λ²λ¦°λ€.μ°ν©μ ν΄μ²΄νκ³ , λͺ¨λ κ΅κ²½μ μ λ«λλ€.
κ° λλΌμ μΈκ΅¬μκ° μ£Όμ΄μ‘μ λ, μΈκ΅¬ μ΄λμ΄ λ©°μΉ λμ λ°μνλμ§ κ΅¬νλ νλ‘κ·Έλ¨μ μμ±
첫째 μ€μ N, L, Rμ΄ μ£Όμ΄μ§λ€. (1 ≤ N ≤ 50, 1 ≤ L ≤ R ≤ 100)λμ§Έ μ€λΆν° Nκ°μ μ€μ κ° λλΌμ μΈκ΅¬μκ° μ£Όμ΄μ§λ€.rν cμ΄μ μ£Όμ΄μ§λ μ μλ A[r][c]μ κ°μ΄λ€. (0 ≤ A[r][c] ≤ 100)μΈκ΅¬ μ΄λμ΄ λ°μνλ μΌμκ° 2,000λ² λ³΄λ€ μκ±°λ κ°μ μ λ ₯λ§ μ£Όμ΄μ§λ€.
μΈκ΅¬ μ΄λμ΄ λ©°μΉ λμ λ°μνλμ§ μ²«μ§Έ μ€μ μΆλ ₯νλ€.
# 1) BFS
# : BFS νμμ ν λλ§λ€ μ°ν©μ κ°μ
ν λλΌμ μ’νλ₯Ό λ΄λλ€
from collections import deque
def bfs(a, b, graph, visit) :
# μ°ν© κ΅κ°
unit = []
people = 0
q = deque()
q.append((a, b)) # μ’ν κΈ°λ‘
unit.append((a, b))
visited[a][b] = True # λ°©λ¬Έ
people += graph[a][b] # λλΌ μΈκ΅¬μ ν©
while q :
x, y = q.popleft()
for i in range(4) :
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < N and not visited[nx][ny] :
# Lλͺ
μ΄μ, Rλͺ
μ΄ν => μ°ν©
if L <= abs(graph[nx][ny] - graph[x][y]) <= R :
q.append((nx, ny))
unit.append((nx, ny))
people += graph[nx][ny]
visited[nx][ny] = True
# κ° μΉΈμ μΈκ΅¬μλ (μ°ν©μ μΈκ΅¬μ) / (μ°ν©μ μ΄λ£¨κ³ μλ μΉΈμ κ°μ)
new_people = people // len(unit)
for a, b in unit :
graph[a][b] = new_people
return True if len(unit) >= 2 else False
# Nκ°μ μ€, λ λλΌμ μΈκ΅¬ μ°¨μ΄κ° Lλͺ
μ΄μ, Rλͺ
μ΄ν
N, L, R = map(int, input().split())
graph = []
for i in range(N) :
graph.append(list(map(int, input().split())))
dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]
day = 0
while True :
visited = [[False] * N for _ in range(N)]
stop = True # True μ΄λ©΄ while λ
for i in range(N) :
for j in range(N) :
if not visited[i][j] :
check = bfs(i, j, graph, visited)
if check :
stop = False
if stop :
break
else :
day += 1
print(day)
728x90
λ°μν
'π¦₯ μ½ν > BAEKJOON' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BAEKJOON python] 17140_μ΄μ°¨μ λ°°μ΄κ³Ό μ°μ° (0) | 2023.04.05 |
---|---|
[BAEKJOON python] 17143_λμμ (0) | 2023.04.05 |
[BAEKJOON python] 15686_μΉν¨ λ°°λ¬ (0) | 2022.10.14 |
[BAEKJOON python] 15685_λλκ³€ μ»€λΈ (0) | 2022.10.14 |
[BAEKJOON python] 15684_μ¬λ€λ¦¬ μ‘°μ (0) | 2022.10.13 |
Comments