π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[BAEKJOON python] 17837_μλ‘μ΄ κ²μ 2 λ³Έλ¬Έ
728x90
λ°μν
μλ‘μ΄ κ²μ 2
ν¬κΈ°κ° N×NμΈ μ²΄μ€νμμ μ§νλκ³ , μ¬μ©νλ λ§μ κ°μλ Kκ°
λ§μ μνλͺ¨μμ΄κ³ , νλμ λ§ μμ λ€λ₯Έ λ§μ μ¬λ¦΄ μ μμ
체μ€νμ κ° μΉΈμ ν°μ, λΉ¨κ°μ, νλμ μ€ νλ
κ²μμ 체μ€ν μμ λ§ Kκ°λ₯Ό λκ³ μμ
λ§μ 1λ²λΆν° Kλ²κΉμ§ λ²νΈ + μ΄λ λ°©ν₯ (μ, μλ, μΌμͺ½, μ€λ₯Έμͺ½)
ν΄ ν λ²μ 1λ² λ§λΆν° Kλ² λ§κΉμ§ μμλλ‘ μ΄λμν€λ κ²
ν λ§μ΄ μ΄λν λ μμ μ¬λ €μ Έ μλ λ§λ ν¨κ» μ΄λ
λ§μ μ΄λ λ°©ν₯μ μλ μΉΈμ λ°λΌμ λ§μ μ΄λμ΄ λ€λ¦
ν΄μ΄ μ§νλλ μ€μ λ§μ΄ 4κ° μ΄μ μμ΄λ μκ° κ²μμ΄ μ’ λ£
1. ν°μμΈ κ²½μ°μλ κ·Έ μΉΈμΌλ‘ μ΄λ
μ΄λνλ €λ μΉΈμ λ§μ΄ μ΄λ―Έ μλ κ²½μ°μλ κ°μ₯ μμ Aλ² λ§μ μ¬λ €λκΈ°
Aλ² λ§μ μμ λ€λ₯Έ λ§μ΄ μλ κ²½μ°μλ Aλ² λ§κ³Ό μμ μλ λͺ¨λ λ§μ΄ μ΄λ
2. λΉ¨κ°μμΈ κ²½μ°μλ μ΄λν νμ Aλ² λ§κ³Ό κ·Έ μμ μλ λͺ¨λ λ§μ μμ¬μλ μμλ₯Ό λ°λλ‘ λ°κΏ
3. νλμμΈ κ²½μ°μλ Aλ² λ§μ μ΄λ λ°©ν₯μ λ°λλ‘ νκ³ ν μΉΈ μ΄λ
λ°©ν₯μ λ°λλ‘ λ°κΎΌ νμ μ΄λνλ €λ μΉΈμ΄ νλμμΈ κ²½μ°μλ μ΄λνμ§ μκ³ κ°λ§ν μμ
체μ€νμ λ²μ΄λλ κ²½μ°μλ νλμκ³Ό κ°μ κ²½μ°
체μ€νμ ν¬κΈ°μ λ§μ μμΉ, μ΄λ λ°©ν₯μ΄ λͺ¨λ μ£Όμ΄μ‘μ λ, κ²μμ΄ μ’ λ£λλ ν΄μ λ²νΈ
κ°μ΄ 1,000λ³΄λ€ ν¬κ±°λ μ λλ‘ κ²μμ΄ μ’ λ£λμ§ μλ κ²½μ°μλ -1μ μΆλ ₯
첫째 μ€μ 체μ€νμ ν¬κΈ° N, λ§μ κ°μ K
λμ§Έ μ€λΆν° Nκ°μ μ€μ 체μ€νμ μ 보
μΉΈμ μ (0μ ν°μ, 1μ λΉ¨κ°μ, 2λ νλμ)
λ€μ Kκ°μ μ€μ λ§μ μ 보
ν, μ΄μ λ²νΈ, μ΄λ λ°©ν₯ (→, ←, ↑, ↓)
κ°μ μΉΈμ λ§μ΄ λ κ° μ΄μ μλ κ²½μ°λ μ λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μμ
# 체μ€νμ ν¬κΈ° N, λ§μ κ°μ K
n, k = map(int, input().split())
# μΉΈμ μ (0μ ν°μ, 1μ λΉ¨κ°μ, 2λ νλμ)
board = [list(map(int, input().split())) for _ in range(n)]
# νμ¬ μ²΄μ€νμ νκ³Ό μ΄μ λμ¬μ Έ μλ λ§μ λ²νΈ
chess = [[[] for _ in range(n)] for _ in range(n)]
# μ΄λ λ°©ν₯ (→, ←, ↑, ↓)
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
# λ§μ μμΉ(x,y) λ°©ν₯(d)
horse = []
for i in range(k):
# ν, μ΄μ λ²νΈ, μ΄λ λ°©ν₯
x, y, d = map(int, input().split())
horse.append([x - 1, y - 1, d - 1])
chess[x - 1][y - 1].append(i)
cnt = 0
def change_dir(d):
# λ°λλ‘ λ°©ν₯ λ°κΎΈκΈ°
if d in [0, 2]:
d += 1
elif d in [1, 3]:
d -= 1
return d
def solve(h_num):
x, y, d = horse[h_num]
nx = x + dx[d]
ny = y + dy[d]
# 체μ€ν μμ΄κ³ , νλμμ΄λΌλ©΄! λ°©ν₯ λ°κΏμΌλ¨
if 0 > nx or nx >= n or 0 > ny or ny >= n or board[nx][ny] == 2:
d = change_dir(d)
horse[h_num][2] = d
nx = x + dx[d]
ny = y + dy[d]
# 체μ€ν μμ΄κ³ , λ νλμμ΄λΌλ©΄! λ©μΆ°λΌ
if 0 > nx or nx >= n or 0 > ny or ny >= n or board[nx][ny] == 2:
return True
horse_up = []
for h_idx, h_n in enumerate(chess[x][y]):
# μ΄λν λ§μ΄λ μλ μλ λ§μ΄λ κ²ΉμΉλ€λ©΄ μ¬λΌν!
if h_n == h_num:
horse_up.extend(chess[x][y][h_idx:])
chess[x][y] = chess[x][y][:h_idx]
break
# λΉ¨κ° μμ΄λΌλ©΄ λ§ μ
ꡬ μλ λͺ¨λ λ¬Άμ΄μ (?) μμ κ±°κΎΈλ‘~
if board[nx][ny] == 1:
# lit = [[[1,2],[3,4]], [[5], [6,7]]]
# => [[[5], [6, 7]], [[1, 2], [3, 4]]]
horse_up = horse_up[-1::-1]
# μμ λ€μ λ°κΏμ€μ©
for h in horse_up:
horse[h][0], horse[h][1] = nx, ny
chess[nx][ny].append(h)
# λ§ 4κ° μ¬λΌνλ©΄ μ’
λ£
if len(chess[nx][ny]) >= 4:
return False
return True
while True:
what = False
if cnt > 1000:
print(-1)
break
for i in range(k):
if solve(i) == False:
what = True
break
cnt += 1
if what:
print(cnt)
break
μμ μ λ ₯
4 4
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
1 1 1
1 2 1
1 3 1
1 4 1
μμ μΆλ ₯
1
νμ μ΄λΆ κΊΌ μ°Έκ³ ν λ―μ€..γ
κ°μ¬ν©λλΉ :)
https://developer-ellen.tistory.com/64
728x90
λ°μν
'π¦₯ μ½ν > BAEKJOON' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BAEKJOON python] 20057_λ§λ²μ¬ μμ΄μ ν λ€μ΄λ (0) | 2023.04.07 |
---|---|
[BAEKJOON python] 20056_λ§λ²μ¬ μμ΄μ νμ΄μ΄λ³Ό (0) | 2023.04.06 |
[BAEKJOON python] 17142_μ°κ΅¬μ 3 (0) | 2023.04.05 |
[BAEKJOON python] 17140_μ΄μ°¨μ λ°°μ΄κ³Ό μ°μ° (0) | 2023.04.05 |
[BAEKJOON python] 17143_λμμ (0) | 2023.04.05 |
Comments