π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[BAEKJOON python] 19237_μ΄λ₯Έ μμ΄ λ³Έλ¬Έ
728x90
λ°μν
μ΄λ₯Έ μμ΄
μμ΄κ° μ¬λ 곡κ°μ λ μ΄μ λ¬Όκ³ κΈ°λ μ€μ§ μκ³ λ€λ₯Έ μμ΄λ€λ§μ΄ λ¨μμλ€
μμ΄μλ 1 μ΄μ M μ΄νμ μμ°μ λ²νΈκ° λΆμ΄ μκ³ , λͺ¨λ λ²νΈλ μλ‘ λ€λ₯΄λ€
μμ΄λ€μ μμμ μ¬μνκΈ° μν΄ λ€λ₯Έ μμ΄λ€μ μ«μλ΄λ €κ³ νλλ°,
1μ λ²νΈλ₯Ό κ°μ§ μ΄λ₯Έ μμ΄λ κ°μ₯ κ°λ ₯ν΄μ λλ¨Έμ§ λͺ¨λλ₯Ό μ«μλΌ μ μλ€
N×N ν¬κΈ°μ 격μ μ€ Mκ°μ μΉΈμ μμ΄κ° ν λ§λ¦¬μ© λ€μ΄ μλ€
1) 맨 μ²μμλ λͺ¨λ μμ΄κ° μμ μ μμΉμ μμ μ λμλ₯Ό λΏλ¦°λ€
2) 1μ΄λ§λ€ λͺ¨λ μμ΄κ° λμμ μνμ’μ°λ‘ μΈμ ν μΉΈ μ€ νλλ‘ μ΄λνκ³ , μμ μ λμλ₯Ό κ·Έ μΉΈμ λΏλ¦°λ€
3) λμλ μμ΄κ° kλ² μ΄λνκ³ λλ©΄ μ¬λΌμ§λ€
κ° μμ΄κ° μ΄λ λ°©ν₯μ κ²°μ ν λλ, λ¨Όμ μΈμ ν μΉΈ μ€ μ무 λμκ° μλ μΉΈμ λ°©ν₯μΌλ‘ μ‘λλ€
κ·Έλ° μΉΈμ΄ μμΌλ©΄ μμ μ λμκ° μλ μΉΈμ λ°©ν₯μΌλ‘ μ‘λλ€
κ°λ₯ν μΉΈμ΄ μ¬λ¬ κ°μΌ μ μλλ°, κ·Έ κ²½μ°μλ νΉμ ν μ°μ μμ
μ°μ μμλ μμ΄λ§λ€ λ€λ₯Ό μ μκ³ , κ°μ μμ΄λΌλ νμ¬ μμ΄κ° λ³΄κ³ μλ λ°©ν₯μ λ°λΌ λ€λ¦
μμ΄κ° 맨 μ²μμ λ³΄κ³ μλ λ°©ν₯μ μ λ ₯μΌλ‘ μ£Όμ΄μ§κ³ , κ·Έ νμλ λ°©κΈ μ΄λν λ°©ν₯μ΄ λ³΄κ³ μλ λ°©ν₯μ΄ λλ€
λͺ¨λ μμ΄κ° μ΄λν ν ν μΉΈμ μ¬λ¬ λ§λ¦¬μ μμ΄κ° λ¨μ μμΌλ©΄,
κ°μ₯ μμ λ²νΈλ₯Ό κ°μ§ μμ΄λ₯Ό μ μΈνκ³ λͺ¨λ 격μ λ°μΌλ‘ μ«κ²¨λλ€
1λ² μμ΄λ§ 격μμ λ¨κ² λκΈ°κΉμ§ λͺ μ΄κ° 걸리λμ§λ₯Ό ꡬνλ νλ‘κ·Έλ¨
1,000μ΄κ° λμ΄λ λ€λ₯Έ μμ΄κ° 격μμ λ¨μ μμΌλ©΄ -1μ μΆλ ₯
첫 μ€μλ N, M, kκ° μ£Όμ΄μ§λ€ (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000)
κ·Έ λ€μ μ€λΆν° Nκ°μ μ€μ κ±Έμ³ κ²©μμ λͺ¨μ΅
0μ λΉμΉΈμ΄κ³ , 0μ΄ μλ μ xλ xλ² μμ΄κ° λ€μ΄μλ μΉΈμ μλ―Έ
κ·Έ λ€μ μ€μλ κ° μμ΄μ λ°©ν₯
1, 2, 3, 4λ κ°κ° μ, μλ, μΌμͺ½, μ€λ₯Έμͺ½
κ·Έ λ€μ μ€λΆν° κ° μμ΄μ λ°©ν₯ μ°μ μμκ° μμ΄ λΉ 4μ€μ© μ°¨λ‘λλ‘ μ£Όμ΄μ§λ€
첫 λ²μ§Έ μ€μ ν΄λΉ μμ΄κ° μλ₯Ό ν₯ν λμ λ°©ν₯ μ°μ μμ
λ λ²μ§Έ μ€μ μλλ₯Ό ν₯ν λμ μ°μ μμ
μΈ λ²μ§Έ μ€μ μΌμͺ½μ ν₯ν λμ μ°μ μμ
λ€ λ²μ§Έ μ€μ μ€λ₯Έμͺ½μ ν₯ν λμ μ°μ μμ
κ° μ°μ μμμλ 1λΆν° 4κΉμ§μ μμ°μ
κ°μ₯ λ¨Όμ λμ€λ λ°©ν₯μ΄ μ΅μ°μ
맨 μ²μμλ κ° μμ΄λ§λ€ μΈμ ν λΉ μΉΈμ΄ μ‘΄μ¬
import copy
# N×N ν¬κΈ°μ 격μ μ€ Mλ§λ¦¬μ μμ΄κ° ν λ§λ¦¬μ©, k μ΄ λμ λμ μ μ§
n, m, k = map(int, input().split())
# 0μ λΉμΉΈμ΄κ³ , 0μ΄ μλ μ xλ xλ² μμ΄ (μμ΄μ λ²νΈλ‘ μ‘΄μ¬ νμ)
sea = [list(map(int, input().split())) for _ in range(n)]
# μμ΄μ λμνν μν΄ λμ νμ΄λ¨Έ, μμ΄μ λ²νΈ
smell = [[[0, 0] for _ in range(n)] for _ in range(n)]
# κ° μμ΄μ λ°©ν₯ (1, 2, 3, 4λ κ°κ° μ, μλ, μΌμͺ½, μ€λ₯Έμͺ½)
s_dir = [0] + list(map(int, input().split()))
dir = [[]]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
# κ° μμ΄μ λ°©ν₯ μ°μ μμ
for i in range(m):
array = []
for j in range(4):
array.append(list(map(int, input().split())))
dir.append(array)
# 1) μμ΄ μ΄λ
def move(sea):
global out
s = copy.deepcopy(sea)
for i in range(n):
for j in range(n):
if sea[i][j] == 0:
continue
# μμ΄ λ²νΈ
s_n = s[i][j]
# μμ΄ λ²νΈλ‘ λ°©ν₯ νμΈ
d = s_dir[s_n]
x, y = i, j
what = False
for p in range(4):
nd = dir[s_n][d - 1][p]
nx = x + dx[nd - 1]
ny = y + dy[nd - 1]
if not (0 <= nx < n and 0 <= ny < n):
continue
# λμ νμ΄λ¨Έ, μμ΄μ λ²νΈ
# μμ΄μ λμκ° μ‘΄μ¬νμ§ μμ λ
# μ΄λν μμΉμ λ§μ½ μμ΄κ° μ‘΄μ¬νμ§ μλ€λ©΄ ν΄λΉ μμΉλ‘ μμ΄λ₯Ό μ΄λ
if smell[nx][ny][1] == 0:
if s[nx][ny] == 0:
s[nx][ny] = sea[x][y]
s[x][y] = 0
# ν΄λΉ μμΉμ μμ΄κ° μ‘΄μ¬νλ€λ©΄ μμ΄μ μ«μλ₯Ό λΉκ΅ν΄μ μ«μκ° λ ν¬λ©΄
# κ·Έ μμ΄λ₯Ό ν΄μΆ μν€κ³ ν΄μΆ μμ΄ μλ₯Ό 1 μ¦κ°
else:
if s[nx][ny] > s[x][y]:
s[nx][ny] = sea[x][y]
out += 1
s[x][y] = 0
s_dir[s_n] = nd
what = True
break
if what:
continue
# 4λ°©ν₯ λ€ λͺ¨λ μμ΄ λμ λλ€λ©΄,
# μμ΄μ λμκ° νμ¬ μμ΄ λ²νΈμ ν΄λΉνλ λμλΌλ©΄ κ·Έ κ³³μΌλ‘ μ΄λ
for p in range(4):
nd = dir[s_n][d - 1][p]
nx = x + dx[nd - 1]
ny = y + dy[nd - 1]
if not (0 <= nx < n and 0 <= ny < n):
continue
if smell[nx][ny][1] == s_n:
s[nx][ny] = sea[x][y]
s[x][y] = 0
s_dir[s_n] = nd
break
return s
# 2) μμ΄ λμ νμ΄λ¨Έ
# νμ¬ μμ΄μ μμΉμ λμλ₯Ό λΏλ¦¬κ³ , move() ν¨μλ‘ μμ΄μ μ΄λμ μ²λ¦¬
def s_smell(k):
for i in range(n):
for j in range(n):
if sea[i][j] != 0:
# λμμ μμ΄ λ²νΈ
smell[i][j][0], smell[i][j][1] = k, sea[i][j]
def smell_down():
for i in range(n):
for j in range(n):
if smell[i][j][1] == 0:
continue
# λμ 1μμ 0μΌλ‘ μ¬λΌμ‘
if smell[i][j][0] == 1:
smell[i][j][0], smell[i][j][1] = 0, 0
# λμ -1
else:
smell[i][j][0] -= 1
count = 0
out = 0
while True:
if count >= 1000:
count = -1
break
s_smell(k)
sea = copy.deepcopy(move(sea))
count += 1
# ν΄μΆλ μμ΄μ μκ° (m-1)κ°, μ¦ λ¨μ μμ΄ 1λ§λ¦¬λ©΄ λ~
if out == m - 1:
break
smell_down()
print(count)
μμ μ λ ₯
5 4 4
0 0 0 0 3
0 2 0 0 0
1 0 0 0 4
0 0 0 0 0
0 0 0 0 0
4 4 3 1
2 3 1 4
4 1 2 3
3 4 2 1
4 3 1 2
2 4 3 1
2 1 3 4
3 4 1 2
4 1 2 3
4 3 2 1
1 4 3 2
1 3 2 4
3 2 1 4
3 4 1 2
3 2 4 1
1 4 2 3
1 4 2 3
μμ μΆλ ₯
14
μ΄λ²κ±°λ γ {κΉλ λ§λ~
μ΄λ €μλ°! γ γ ꡬλ₯ μ½κ° μ νΈλ³΄λ¨ μ κ·Έλ μ΄λ γ
728x90
λ°μν
'π¦₯ μ½ν > BAEKJOON' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BAEKJOON python] 21609_μμ΄ μ€νκ΅ (1) | 2023.04.08 |
---|---|
[BAEKJOON python] 21608_μμ΄ μ΄λ±νκ΅ (0) | 2023.04.08 |
[BAEKJOON python] 19236_μ²μλ μμ΄ (0) | 2023.04.08 |
[BAEKJOON python] 16236_μκΈ°μμ΄ (0) | 2023.04.08 |
[BAEKJOON python] 20055_μ»¨λ² μ΄μ΄ λ²¨νΈ μμ λ‘λ΄ (0) | 2023.04.08 |
Comments