Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 18428. ๊ฐ์‹œ ํ”ผํ•˜๊ธฐ

deo2kim 2020. 11. 28. 15:13
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

  • S1 | ์™„์ „ํƒ์ƒ‰

N์˜ ๋ฒ”์œ„๊ฐ€ ๋งค์šฐ ์ž‘์œผ๋ฏ€๋กœ ์™„์ „ํƒ์ƒ‰์„ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋ฒฝ์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋Š” ๋นˆ ๊ณต๊ฐ„์„ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ•˜๊ณ ,

์ฝค๋น„๋„ค์ด์…˜(3)์„ ํ•œ๋‹ค. ( ๋ฒฝ์„ 3๊ฐœ ์„ธ์›Œ์•ผ ํ•˜๋ฏ€๋กœ )

 

๋ฒฝ์„ ์„ธ์šฐ๋ฉด ๊ฐ์‹œ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.

์„ ์ƒ๋‹˜๋ฆฌ์ŠคํŠธ๋„ ๋งŒ๋“ค์–ด์„œ ์ƒํ•˜์ขŒ์šฐ ๊ฐ์‹œ๋ฅผ ํ•œ๋‹ค.

๊ฐ์‹œ๋ฅผ ํ•˜๋˜ ๋„์ค‘ ๋๊นŒ์ง€ ๊ฐ€๊ฑฐ๋‚˜ ๋ฒฝ์„ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ๋ฐฉํ–ฅ์˜ ๊ฐ์‹œ๋Š” ๋ฉˆ์ถ”๊ณ 

ํ•™์ƒ์„ ๋งŒ๋‚˜๋ฉด ๊ฐ์‹œ์— ์„ฑ๊ณตํ•˜๋ฏ€๋กœ

๊ทธ ๋ฒฝ์€ ๋‹ค์‹œ ์ฒ ๊ฑฐํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฒฝ์„ ์„ธ์šด๋‹ค.

์„ ์ƒ๋‹˜์ด ๋ชจ๋“  ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด์„œ ๊ฐ์‹œ์— ์‹คํŒจํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

from itertools import combinations as cb


def watch():
    for teacher in teacher_list:
        x, y = teacher
        # ์ƒ
        nx, ny = x, y
        while nx > 0:
            nx -= 1
            if hallway[nx][ny] == 'S':
                return False

            if hallway[nx][ny] == 'O':
                break
        # ํ•˜
        nx, ny = x, y
        while nx < N - 1:
            nx += 1
            if hallway[nx][ny] == 'S':
                return False
            if hallway[nx][ny] == 'O':
                break
        # ์ขŒ
        nx, ny = x, y
        while ny > 0:
            ny -= 1
            if hallway[nx][ny] == 'S':
                return False
            if hallway[nx][ny] == 'O':
                break
        # ์šฐ
        nx, ny = x, y
        while ny < N - 1:
            ny += 1
            if hallway[nx][ny] == 'S':
                return False
            if hallway[nx][ny] == 'O':
                break
    return True


if __name__ == '__main__':
    N = int(input())
    hallway = [input().split() for _ in range(N)]

    empty_list = []
    teacher_list = []
    for i in range(N):
        for j in range(N):
            if hallway[i][j] == 'X':
                empty_list.append((i, j))
            elif hallway[i][j] == 'T':
                teacher_list.append((i, j))

    # ๋ฒฝ 3๊ฐœ ๋ฝ‘๊ธฐ
    for walls in cb(empty_list, 3):

        # ๋ฒฝ ์„ธ์šฐ๊ธฐ
        for wall in walls:
            x, y = wall
            hallway[x][y] = 'O'
        # ๊ฐ์‹œํ•˜๊ธฐ
        if watch():
            print('YES')
            break
        # ๋ฒฝ ํ—ˆ๋ฌผ๊ธฐ
        for wall in walls:
            x, y = wall
            hallway[x][y] = 'X'
    else:
        print('NO')
 

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/18428

 

18428๋ฒˆ: ๊ฐ์‹œ ํ”ผํ•˜๊ธฐ

NxN ํฌ๊ธฐ์˜ ๋ณต๋„๊ฐ€ ์žˆ๋‹ค. ๋ณต๋„๋Š” 1x1 ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋ฉฐ, ํŠน์ •ํ•œ ์œ„์น˜์—๋Š” ์„ ์ƒ๋‹˜, ํ•™์ƒ, ํ˜น์€ ์žฅ์• ๋ฌผ์ด ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ˜„์žฌ ๋ช‡ ๋ช…์˜ ํ•™์ƒ๋“ค์€ ์ˆ˜์—…์‹œ๊ฐ„์— ๋ชฐ๋ž˜ ๋ณต๋„๋กœ ๋น ์ ธ๋‚˜์™”๋Š”๋ฐ, ๋ณต

www.acmicpc.net

 

 

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€์ˆ˜0