ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] ๋ธ”๋ก ์ด๋™ํ•˜๊ธฐ with Python
    PS 2021. 12. 12. 02:28
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ Programmers - [๋ธ”๋ก ์ด๋™ํ•˜๊ธฐ]

    ๐Ÿ’ก ์กฐ๊ฑด

    1. board์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด๋Š” 5 ์ด์ƒ 100 ์ดํ•˜.
      board์˜ ์›์†Œ๋Š” 0(์ด๋™๊ฐ€๋Šฅ ๋ธ”๋ก) ๋˜๋Š” 1(์ด๋™๋ถˆ๊ฐ€ ๋ฒฝ).

    2. ๋กœ๋ด‡์ด ์ฒ˜์Œ์— ๋†“์—ฌ ์žˆ๋Š” ์นธ (1, 1), (1, 2)๋Š” ํ•ญ์ƒ 0์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

    3. ๋กœ๋ด‡์€ ํšŒ์ „ํ•  ์ˆ˜ ์žˆ๋‹ค.

    4. BFS, ์‹œ๋ฎฌ๋ ˆ์ด์…˜์˜ ๋ฌธ์ œ

    5. (N, N) ์ขŒํ‘œ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ์ตœ์†Œ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from collections import deque
    
    
    def get_next_pos(pos, board):
        next_pos = []
    
        pos = list(pos)
        pos1_x, pos1_y, pos2_x, pos2_y = pos[0][0], pos[0][1], pos[1][0], pos[1][1]
    
        dx = [-1, 1, 0, 0]
        dy = [0, 0, -1, 1]
    
        for i in range(4):
            pos1_next_x, pos1_next_y, pos2_next_x, pos2_next_y = pos1_x + dx[i], pos1_y + dy[i], pos2_x + dx[i], pos2_y + dy[i]
    
            if board[pos1_next_x][pos1_next_y] == 0 and board[pos2_next_x][pos2_next_y] == 0:
                next_pos.append({(pos1_next_x, pos1_next_y), (pos2_next_x, pos2_next_y)})
    
        if pos1_x == pos2_x:
            for i in [-1, 1]:
    
                if board[pos1_x + i][pos1_y] == 0 and board[pos2_x + i][pos2_y] == 0:
                    next_pos.append({(pos1_x, pos1_y), (pos1_x + i, pos1_y)})
                    next_pos.append({(pos2_x, pos2_y), (pos2_x + i, pos2_y)})
    
        elif pos1_y == pos2_y:
            for i in [-1, 1]:
                if board[pos1_x][pos1_y + i] == 0 and board[pos2_x][pos2_y + i] == 0:
                    next_pos.append({(pos1_x, pos1_y), (pos1_x, pos1_y + i)})
                    next_pos.append({(pos2_x, pos2_y), (pos2_x, pos2_y + i)})
        return next_pos
    
    
    def solution(board):
        n = len(board)
        new_board = [[1] * (n + 2) for _ in range(n + 2)]
        for i in range(n):
            for j in range(n):
                new_board[i + 1][j + 1] = board[i][j]
    
        q = deque()
        visited = []
    
        pos = {(1, 1), (1, 2)}
    
        q.append((pos, 0))
        visited.append(pos)
    
        while q:
            pos, cost = q.popleft()
    
            if (n, n) in pos:
                return cost
    
            for next_pos in get_next_pos(pos, new_board):
                if next_pos not in visited:
                    q.append((next_pos, cost + 1))
                    visited.append(next_pos)
        return 0

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    print(solution([[0, 0, 0, 1, 1],[0, 0, 0, 1, 0],[0, 1, 0, 1, 1],[1, 1, 0, 0, 1],[0, 0, 0, 0, 0]]))

    ์‹คํ–‰๊ฒฐ๊ณผ

    7

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. ๊ฐ€์žฅ ๋จผ์ €, (n * n) ํฌ๊ธฐ์˜ ๋งต์„ (n + 2) * (n + 2) ๋งต์œผ๋กœ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด
      ๋งต ์ฃผ๋ณ€์„ 1๋กœ ๋‘˜๋Ÿฌ์ฃผ์–ด ์ด๋™ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ณณ์„ ํ™•์‹คํžˆ ๋งŒ๋“ค์–ด์ค€๋‹ค.

    2. ์‹œ์ž‘ ์œ„์น˜๋Š” {(1, 1), (1, 2)} ๋กœ pos์— ์ €์žฅํ•œ ๋’ค ํ์— ๋„ฃ๋Š”๋‹ค.
      ๋ฌผ๋ก  ๋ฐฉ๋ฌธํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ธธ visited ๋ฆฌ์ŠคํŠธ์—๋„ ์ €์žฅํ•œ๋‹ค.

    3. BFS์˜ ๋ฐฉ์‹์œผ๋กœ Queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ์ˆœํšŒ๋ฅผ ํ•œ๋‹ค.
      ๋‹จ, ํ˜„์žฌ ์œ„์น˜์—์„œ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ํšŒ์ „์ด ๊ฐ€๋Šฅํ•œ ์œ„์น˜๋ฅผ ํ์— ์ €์žฅํ•œ๋‹ค.

    4. 3๋ฒˆ์—์„œ ๋งํ•œ ์ด๋™ ๋ฐ ํšŒ์ „์ด ๊ฐ€๋Šฅํ•œ ์ขŒํ‘œ๋Š” ํ•จ์ˆ˜ get_next_pos()์—์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ขŒํ‘œ๊ฐ’๋“ค์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

    5. get_next_pos ์—์„œ๋Š” ํ˜„์žฌ ์œ„์น˜์—์„œ ์ด๋™ ๋ฐ ๊ฐ€๋Šฅํ•œ ์ขŒํ‘œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ์•„๋ž˜์˜ ์กฐ๊ฑด์„ ์ž˜ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.

      1. ์ƒํ•˜์ขŒ์šฐ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•œ์ง€
      2. ํ˜„์žฌ ๋กœ๋ด‡์ด ๊ฐ€๋กœ๋กœ ๋†“์—ฌ์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ ํšŒ์ „์ด ๊ฐ€๋Šฅํ•œ์ง€
      3. ํ˜„์žฌ ๋กœ๋ด‡์ด ์„ธ๋กœ๋กœ ๋†“์—ฌ์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ ํšŒ์ „์ด ๊ฐ€๋Šฅํ•œ์ง€
    6. get_next_pos ์—์„œ ๋ฐ˜ํ™˜๋ฐ›์€ ์ขŒํ‘œ๋“ค ์ค‘, ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์žฅ์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  cost(๊ฑธ๋ฆฐ ์‹œ๊ฐ„) ์„ ํ์™€ ํ•จ๊ป˜ ๋„ฃ์–ด์ค€๋‹ค.

    ๐Ÿ’พ ๋Š๋‚€์ 

    1. ๋กœ๋ด‡์ด 90๋„ ํšŒ์ „ํ•˜๋Š” ์ขŒํ‘œ์— ๋Œ€ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ๋‹ค.
    2. ์ขŒํ‘œ ๊ณ„์‚ฐ์ด ํ—ท๊ฐˆ๋ ค ํž˜์ด ๋“ค์—ˆ๋‹ค.
    3. ์ขŒํ‘œ ๋ฐ ์ธ๋ฑ์‹ฑ์— ๋Œ€ํ•ด ์—ฐ์Šต์ด ๋งŽ์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.