hugDog
Android DevLog
hugDog
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ™Œ Hello? (162)
    • ๐Ÿงฉ์•ˆ๋“œ๋กœ์ด๋“œ (12)
      • ๊ฐœ๋… ์ •๋ฆฌ (5)
      • ๋ฒ„๊ทธ ํ•ด๊ฒฐ (4)
      • ๊ธฐํƒ€ (3)
    • ๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜ (54)
      • ๊ฐœ๋… (0)
      • ๋ฐฑ์ค€ (48)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (6)
    • ๐Ÿ“„๊ฐœ๋ฐœ ์ผ์ง€ (0)
      • FINPO (0)
    • ๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (71)
      • C++ ์ •๋ฆฌ (49)
      • C++๊ธฐ์ดˆํ”Œ๋Ÿฌ์Šค ์—ฐ์Šต๋ฌธ์ œ (20)
      • Kotlin (2)
    • โญProject (1)
    • ๐ŸšดTIL (13)
      • Clean Code (13)
    • ๐Ÿšฉ๊ธฐํƒ€ (9)
      • ๋ชฉํ‘œ (6)
      • ์ผ์ƒ (3)
      • ๋ฌธ์„œ (0)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
hugDog

Android DevLog

[Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1726๋ฒˆ: ๋กœ๋ด‡
๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1726๋ฒˆ: ๋กœ๋ด‡

2022. 1. 7. 12:23
728x90

๋ฌธ์ œ

 

ํ’€์ด

์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ ์„ค์ •

def turnLeft(now):
    if now == 1:    return 4 #๋™ ๋ถ
    if now == 2:    return 3 #์„œ ๋‚จ
    if now == 3:    return 1 #๋‚จ ๋™
    if now == 4:    return 2 #๋ถ ์„œ

def turnRight(now):
    if now == 1:    return 3 #๋™ ๋‚จ
    if now == 2:    return 4 #์„œ ๋ถ
    if now == 3:    return 2 #๋‚จ ์„œ
    if now == 4:    return 1 #๋ถ ๋™

 

์ž…๋ ฅ

i, j, dir์€ ๋กœ๋ด‡์˜ ์œ„์น˜

m, n = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(m)]
visited = [[[False] * 5 for _ in range(n)] for _ in range(m)]

i, j, dir = map(int, input().split())
destI, destJ, destDir = map(int, input().split())

 

bfs

1,2,3์นธ์„ ์›€์ง์ด๋˜ ๋„์ค‘ ๋ฒฝ์„ ๋งŒ๋‚˜๋ฉด ๋ฐ”๋กœ break๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค. (๋ฒฝ์€ ํ†ต๊ณผํ•  ์ˆ˜ ์—†์Œ)

def bfs():
    q = deque()
    q.append((i - 1, j - 1, dir, 0))
    visited[i - 1][j - 1][dir] = True
    
    while q:
        si, sj, sdir, cnt = q.popleft()
        if si == destI - 1 and sj == destJ - 1 and sdir == destDir:
            print(cnt)
            return
        
        left, right = turnLeft(sdir), turnRight(sdir)
        
        if not visited[si][sj][left]:
            visited[si][sj][left] = True
            q.append((si, sj, left, cnt + 1))
            
        if not visited[si][sj][right]:
            visited[si][sj][right] = True
            q.append((si, sj, right, cnt + 1))
        
        if sdir in [1, 2]:
            weight = 1
            if sdir == 2:
                weight = -1
            for k in range(1, 4):
                nj = sj + weight * k #1,2,3 ๋งŒํผ ์ด๋™
                if nj < 0 or nj >= n or visited[si][nj][sdir]:
                    continue
                if graph[si][nj] == 1:
                    break
                visited[si][nj][sdir] = True
                q.append((si, nj, sdir, cnt + 1))
        
        if sdir in [3, 4]:
            weight = 1
            if sdir == 4:
                weight = -1
            for k in range(1, 4):
                ni = si + weight * k #1,2,3 ๋งŒํผ ์ด๋™
                if ni < 0 or ni >= m or visited[ni][sj][sdir]:
                    continue
                if graph[ni][sj] == 1:
                    break
                visited[ni][sj][sdir] = True
                q.append((ni, sj, sdir, cnt + 1))

 

์ฝ”๋“œ

from collections import deque
input = __import__('sys').stdin.readline

def turnLeft(now):
    if now == 1:    return 4 #๋™ ๋ถ
    if now == 2:    return 3 #์„œ ๋‚จ
    if now == 3:    return 1 #๋‚จ ๋™
    if now == 4:    return 2 #๋ถ ์„œ

def turnRight(now):
    if now == 1:    return 3 #๋™ ๋‚จ
    if now == 2:    return 4 #์„œ ๋ถ
    if now == 3:    return 2 #๋‚จ ์„œ
    if now == 4:    return 1 #๋ถ ๋™

m, n = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(m)]
visited = [[[False] * 5 for _ in range(n)] for _ in range(m)]

i, j, dir = map(int, input().split())
destI, destJ, destDir = map(int, input().split())

def bfs():
    q = deque()
    q.append((i - 1, j - 1, dir, 0))
    visited[i - 1][j - 1][dir] = True
    
    while q:
        si, sj, sdir, cnt = q.popleft()
        if si == destI - 1 and sj == destJ - 1 and sdir == destDir:
            print(cnt)
            return
        
        left, right = turnLeft(sdir), turnRight(sdir)
        
        if not visited[si][sj][left]:
            visited[si][sj][left] = True
            q.append((si, sj, left, cnt + 1))
            
        if not visited[si][sj][right]:
            visited[si][sj][right] = True
            q.append((si, sj, right, cnt + 1))
        
        if sdir in [1, 2]:
            weight = 1
            if sdir == 2:
                weight = -1
            for k in range(1, 4):
                nj = sj + weight * k #1,2,3 ๋งŒํผ ์ด๋™
                if nj < 0 or nj >= n or visited[si][nj][sdir]:
                    continue
                if graph[si][nj] == 1:
                    break
                visited[si][nj][sdir] = True
                q.append((si, nj, sdir, cnt + 1))
        
        if sdir in [3, 4]:
            weight = 1
            if sdir == 4:
                weight = -1
            for k in range(1, 4):
                ni = si + weight * k #1,2,3 ๋งŒํผ ์ด๋™
                if ni < 0 or ni >= m or visited[ni][sj][sdir]:
                    continue
                if graph[ni][sj] == 1:
                    break
                visited[ni][sj][sdir] = True
                q.append((ni, sj, sdir, cnt + 1))

bfs()

 

๋งˆ๋ฌด๋ฆฌ

์˜์‹์˜ ํ๋ฆ„(?)๋Œ€๋กœ ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋‹ˆ ๋งž์•˜๋‹ค.

 

 

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ (์ƒˆ์ฐฝ์—ด๋ฆผ)
    '๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 17472๋ฒˆ: ๋‹ค๋ฆฌ ๋งŒ๋“ค๊ธฐ 2
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 2146๋ฒˆ: ๋‹ค๋ฆฌ ๋งŒ๋“ค๊ธฐ
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 3055๋ฒˆ: ํƒˆ์ถœ
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 16933๋ฒˆ: ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ 3
    hugDog
    hugDog
    ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต๋ถ€ ์ค‘์ธ ํ•™์ƒ์ž…๋‹ˆ๋‹ค!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”