λ¬Έμ
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λ² λ³΄λ€ μκ±°λ κ°μ μ λ ₯λ§ μ£Όμ΄μ§λ€.
μΆλ ₯
μΈκ΅¬ μ΄λμ΄ λ©°μΉ λμ λ°μνλμ§ μ²«μ§Έ μ€μ μΆλ ₯νλ€.
https://www.acmicpc.net/problem/16234
π‘ νμ΄ λ° μ½λ
from collections import deque
def bfs(x, y, open):
queue = deque()
queue.append((x, y))
check[x][y] = 1
open.add((x, y))
while queue:
x, y = queue.popleft()
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= n:
continue
if l <= abs(data[nx][ny] - data[x][y]) <= r and not check[nx][ny]:
queue.append((nx, ny))
check[nx][ny] = 1
open.add((nx, ny))
temp, count = 0, 0
for op in open:
temp += data[op[0]][op[1]]
count += 1
if count > 1:
for op in open:
data[op[0]][op[1]] = temp // count
return True
else:
return False
data = []
n, l, r = map(int, input().split())
for _ in range(n):
data.append(list(map(int, input().split())))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
result, flag = 0, True
while flag:
check = [[0]*n for _ in range(n)]
flag = False
for i in range(n):
for j in range(n):
if not check[i][j] and bfs(i, j, set()):
flag = True
if flag:
result += 1
print(result)
bfsλ₯Ό μ΄μ©νμ¬ κ΅κ²½μ νμΈνκ³ , μΈκ΅¬ μλ₯Ό μ‘°μ νλ€. λ€λ§, PyPy3λ‘ μ μΆνμ§ μκ³ Python3λ‘ μ μΆνλ€λ©΄ μκ°μ΄κ³Όκ° λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ μΈκ΅¬ μ μ‘°μ μ bfs λ΄μμ μ€ννμ§ μκ³ bfsλ₯Ό ν΅ν΄ κ΅κ²½μ νμΈνμ¬ κ·Έ μ 보λ₯Ό 리μ€νΈμ λ£μ ν νκΊΌλ²μ μΈκ΅¬ μλ₯Ό λ³κ²½ν΄μ£Όλ λ°©λ²μ λ μ¬λ Έλ€. νμ§λ§ μ¬μ ν μκ°μ΄κ³Όλ ν΄κ²°λμ§ μμλ€. μΌλ¨ PyPy3λ‘ μ μΆν΄ λκ³ λ€μμ λ€μ μλν΄λ³΄κ² λ€. λ³κ²½νλ μ½λλ λ€μκ³Ό κ°λ€.
from collections import deque
def bfs(x, y, open):
queue = deque()
queue.append((x, y))
check[x][y] = 1
open.add((x, y))
val, count = 0, 0
while queue:
x, y = queue.popleft()
val += data[x][y]
count += 1
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= n:
continue
if l <= abs(data[nx][ny] - data[x][y]) <= r and not check[nx][ny]:
queue.append((nx, ny))
check[nx][ny] = 1
open.add((nx, ny))
return val, count, open
data = []
n, l, r = map(int, input().split())
for _ in range(n):
data.append(list(map(int, input().split())))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
result, flag = 0, True
while flag:
check = [[0]*n for _ in range(n)]
all = []
flag = False
for i in range(n):
for j in range(n):
if not check[i][j]:
val, count, open = bfs(i, j, set())
if count > 1:
flag = True
all.append((val//count, open))
for val, op in all:
for x, y in op:
data[x][y] = val
if flag:
result += 1
print(result)
'Algorithm > π Baekjoon Judge' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] λ°±μ€ 14499λ² μ£Όμ¬μ ꡴리기 - νμ΄μ¬(Python) (0) | 2022.04.02 |
---|---|
[BOJ] λ°±μ€ 20055λ² μ»¨λ² μ΄μ΄ λ²¨νΈ μμ λ‘λ΄ - νμ΄μ¬(Python) (0) | 2022.04.01 |
[BOJ] λ°±μ€ 14500λ² ν νΈλ‘λ―Έλ Έ - νμ΄μ¬(Python) (0) | 2022.03.31 |
[BOJ] λ°±μ€ 3190λ² λ± - νμ΄μ¬(Python) (3) | 2022.02.23 |
[BOJ] λ°±μ€ 1238λ² νν° - νμ΄μ¬(Python) (0) | 2022.01.19 |