π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[BAEKJOON python] 17822_μν λ리기 λ³Έλ¬Έ
728x90
λ°μν
μν λ리기
λ°μ§λ¦μ΄ 1, 2, ..., NμΈ μνμ΄ ν¬κΈ°κ° μμμ§λ μμΌλ‘ λ°λ₯μ λμ¬μκ³
μνμ μ€μ¬μ λͺ¨λ κ°λ€
μνμ λ°μ§λ¦μ΄ iμ΄λ©΄, κ·Έ μνμ iλ²μ§Έ μν
κ°κ°μ μνμλ Mκ°μ μ μκ° μ νμκ³ , iλ²μ§Έ μνμ μ ν jλ²μ§Έ μμ μμΉλ (i, j)
μμ μμΉ
(i, 1)μ (i, 2), (i, M)κ³Ό μΈμ
(i, M)μ (i, M-1), (i, 1)κ³Ό μΈμ
(i, j)λ (i, j-1), (i, j+1)κ³Ό μΈμ (2 ≤ j ≤ M-1)
(1, j)λ (2, j)μ μΈμ
(N, j)λ (N-1, j)μ μΈμ
(i, j)λ (i-1, j), (i+1, j)μ μΈμ (2 ≤ i ≤ N-1)
μνμ νμ μ λ 립μ μΌλ‘ μ΄λ£¨μ΄μ§λ€
2λ² μνμ νμ νμ λ, λλ¨Έμ§ μνμ νμ νμ§ μλλ€
μνμ νμ μν¬ λλ μμ μμΉλ₯Ό κΈ°μ€μΌλ‘ νλ©°, νμ μν¨ νμ μμ μμΉλ νμ μν€κΈ° μ κ³Ό μΌμΉ
μνμ μλμ κ°μ λ°©λ²μΌλ‘ μ΄ Tλ² νμ
μνμ νμ λ°©λ²μ 미리 μ ν΄μ Έ μκ³ , iλ²μ§Έ νμ ν λ μ¬μ©νλ λ³μλ xi, di, ki
1) λ²νΈκ° xiμ λ°°μμΈ μνμ diλ°©ν₯μΌλ‘ kiμΉΈ νμ
0μΈ κ²½μ°λ μκ³ λ°©ν₯, 1μΈ κ²½μ°λ λ°μκ³ λ°©ν₯
2) μνμ μκ° λ¨μ μμΌλ©΄, μΈμ νλ©΄μ μκ° κ°μ κ²μ λͺ¨λ μ°Ύλλ€
κ·Έλ¬ν μκ° μλ κ²½μ°μλ μνμμ μΈμ νλ©΄μ κ°μ μλ₯Ό λͺ¨λ μ§μ΄λ€
μλ κ²½μ°μλ μνμ μ ν μμ νκ· μ ꡬνκ³ , νκ· λ³΄λ€ ν° μμμ 1μ λΉΌκ³ , μμ μμλ 1μ λνλ€
3) μνμ Tλ² νμ μν¨ ν μνμ μ ν μμ ν©
첫째 μ€μ N, M, Tμ΄ μ£Όμ΄μ§λ€
λμ§Έ μ€λΆν° Nκ°μ μ€μ μνμ μ ν μκ° μ£Όμ΄μ§λ€
iλ²μ§Έ μ€μ jλ²μ§Έ μλ (i, j)μ μ ν μλ₯Ό μλ―Έ
λ€μ Tκ°μ μ€μ xi, di, ki
from collections import deque
# nκ°μ μν, μνμλ Mκ°μ μ μ, tλ² νμ
n, m, t = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
# λ, μ, λ¨, λΆ
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
def rotate(x, d, k) :
queue = deque()
queue.extend(graph[x])
# 0μΈ κ²½μ°λ μκ³ λ°©ν₯, 1μΈ κ²½μ°λ λ°μκ³ λ°©ν₯
if d == 0 :
# μκ³λ°©ν₯μΌλ‘ kλ°° λ§νΌ λ리기
queue.rotate(k)
else :
# λ°μκ³λ°©ν₯μΌλ‘ kλ°° λ§νΌ λ리기
queue.rotate(-k)
graph[x] = list(queue)
def change_arg() :
arg_cnt = 0
all_sum = 0
for i in range(n) :
for j in range(m) :
# μ²μ λͺ¨λ μ κ±°λ μ«μ(0)μ μ μΈν λλ¨Έμ§ μ«μμ κ°―μμ
# κ·Έ μ«μλ€μ ν©μ κ³μ°ν ν,
# λ§μ½ λͺ¨λ μ«μκ° 0μ΄λΌλ©΄ νκ· μ κ³μ°νμ§ μκ² λ¦¬ν΄
if graph[i][j] != 0 :
arg_cnt += 1
all_sum += graph[i][j]
if arg_cnt == 0:
return False
# νκ· μ κ³μ°νλ€λ©΄ λͺ¨λ μνμ λ€μ΄μλ μ«μλ€μ κ°κ³Ό λΉκ΅
avg = all_sum / arg_cnt
for i in range(n) :
for j in range(m) :
if graph[i][j] != 0 :
# νκ· κ°λ³΄λ€ ν¬λ€λ©΄ -1, νκ· κ°λ³΄λ€ μλ€λ©΄ +1
if graph[i][j] > avg :
graph[i][j] -= 1
elif graph[i][j] < avg :
graph[i][j] += 1
return True
# μΈμ ν κ³³μ μ«μκ° κ°μμ§ νμ
ν΄μ λ§μ½ μ«μκ° κ°λ€λ©΄ μνμ μ«μλ₯Ό μ κ±°(0μΌλ‘ λ³κ²½)
# iλ²μ§Έ μνμλ μ¦, 0λ² μ΄κ³Ό m-1 μ΄μ μ΄μ΄μ Έ μμΌλ―λ‘ μΈμ 4λ°©ν₯μ μ΄ν λ, κ°μ μ λ³κ²½ν΄μ€μ λͺ¨λ μνμ μΈμ ν κ³³μ λ°©λ¬Έ
def solve(x, y) :
queue = deque()
queue.append((x, y))
visited[x][y] = True
value = graph[x][y]
graph[x][y] = 0
cnt = 0
while queue :
x, y = queue.popleft()
for i in range(4) :
nx = x + dx[i]
ny = y + dy[i]
if 0 > ny or ny >= m :
if y == 0 :
ny = m -1
elif y == m - 1:
ny = 0
if 0 <= nx < n and 0 <= ny < m :
if not visited[nx][ny] :
if graph[nx][ny] == value :
cnt += 1
graph[nx][ny] = 0
visited[nx][ny] = True
queue.append((nx, ny))
if cnt == 0 :
graph[x][y] = value
return cnt
for _ in range(t) :
# λ²νΈκ° xiμ λ°°μμΈ μνμ diλ°©ν₯μΌλ‘ kiμΉΈ νμ
x, d, k = map(int, input().split())
check_sum = 0
for i in range(n) :
check_sum += sum(graph[i])
if (i+1) % x == 0 :
rotate(i, d, k)
if check_sum == 0 :
break
else :
visited = [[False] * m for _ in range(n)]
cnt = 0
for i in range(n) :
for j in range(m) :
if not visited[i][j] and graph[i][j] != 0 :
cnt += solve(i, j)
if cnt == 0 :
change_arg()
answer = 0
for i in range(n) :
answer += sum(graph[i])
print(answer)
μμ μ λ ₯
4 4 1
1 1 2 3
5 2 4 2
3 1 3 5
2 1 3 2
2 0 1
μμ μΆλ ₯
30
μ°μ΅λ μ΄λ ΅μ΅λλ€.
728x90
λ°μν
'π¦₯ μ½ν > BAEKJOON' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BAEKJOON C++] 1977_μμ μ κ³±μ (0) | 2023.06.28 |
---|---|
[BAEKJOON C++] 11718_κ·Έλλ‘ μΆλ ₯νκΈ° (0) | 2023.06.28 |
[BAEKJOON python] 13460_ꡬμ¬νμΆ (1) | 2023.04.09 |
[BAEKJOON python] 21609_μμ΄ μ€νκ΅ (1) | 2023.04.08 |
[BAEKJOON python] 21608_μμ΄ μ΄λ±νκ΅ (0) | 2023.04.08 |
Comments