😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[BAEKJOON python] 17837_μƒˆλ‘œμš΄ κ²Œμž„ 2 λ³Έλ¬Έ

πŸ¦₯ μ½”ν…Œ/BAEKJOON

[BAEKJOON python] 17837_μƒˆλ‘œμš΄ κ²Œμž„ 2

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 4. 6. 00:58
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
λ°˜μ‘ν˜•
Comments