๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ & ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/[๐๐ฒ๐ญ๐ก๐จ๐ง] ๐€๐ฅ๐ ๐จ๐ซ๐ข๐ญ๐ก๐ฆ

[Python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ & ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

๐ŸคRyusun๐Ÿค 2023. 9. 3. 23:31
# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ

from collections import deque

d_row = [0, -1, 0, 1]
d_col = [1, 0, -1, 0]


def solution(places):
    answer = []
    for i in range(5):
        result = bfs(places[i])
        answer.append(result)

    return answer


def bfs(place):
    queue = deque()
    visited = [[False] * 5 for _ in range(5)]
    for i in range(5):
        for j in range(5):
            if place[i][j] == 'P':
                queue.append([i, j, False])
            if place[i][j] == 'O':
                queue.append([i, j, False])

    while queue:
        x, y, flag = queue.popleft()
        for i in range(4):
            dx = d_row[i] + x
            dy = d_col[i] + y
            if 0 <= dx < 5 and 0 <= dy < 5:
                if place[x][y] == 'P' and place[dx][dy] == 'P':
                    return 0
                elif flag == False and not visited[dx][dy] and place[x][y] == 'O' and place[dx][dy] == 'P':
                    flag = True
                    queue.append([dx, dy, True])
                elif place[x][y] == 'O' and place[dx][dy] == 'P' and flag:
                    return 0

    return 1

places = [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"],
          ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"],
          ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"],
          ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"],
          ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]]
solution(places)

 

ํ’€์ด

ํ…Œ์ด๋ธ”('O')๊ธฐ์ค€์œผ๋กœ 4๋ฉด์— ์‚ฌ๋žŒ('P')๊ฐ€ ์žˆ๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.

๋งŒ์•ฝ ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ๋‚จ์€ 3๋ฉด์—๋Š” ์‚ฌ๋žŒ์ด ์—†์–ด์•ผ ๊ฑฐ๋ฆฌ๋‘๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ์ด ๋‚˜์˜ค๋ฉด flag = True๋กœ ์„ค์ •ํ•˜๊ณ  queue์— ๋„ฃ์–ด์ค€ํ›„ ๋ฐ˜๋ณต๋ฌธ์ด ๋๋‚˜๊ธฐ์ „๊นŒ์ง€ ์‚ฌ๋žŒ์ด ๋˜ ๋‚˜์˜ค๋ฉด return 0์„ ํ•ด์ค€๋‹ค.

 

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

def solution(phone_book):
    phone_book.sort()
    for i in range(len(phone_book)-1):
        if len(phone_book[i]) <= len(phone_book[i+1]):
            i_len = len(phone_book[i])
            if phone_book[i] == phone_book[i+1][:i_len]:
                return False
    return True