[백준/Python] 23081번 오델로

Kanto(칸토)·2025년 5월 4일
0

알고리즘 인터뷰

목록 보기
32/32
n = int(input())
board = [list(input()) for _ in range(n)]
arr = [[0] * n for _ in range(n)]

dy = [0, -1, 0, 1, 1, -1, 1, -1]
dx = [1, 0, -1, 0, -1, 1, 1, -1]


def findblack(i: int, x, y):
    """
    정해진 방향으로 진행했을 때 백돌을 잡을 수 있다면 백돌의 개수를 반환하는 함수이다
    """
    ny = y
    nx = x
    count = 0
    while board[ny][nx] == 'W':
        ny += dy[i]
        nx += dx[i]
        if nx < 0 or nx >= len(board) or ny < 0 or ny >= len(board):
            return 0
        count += 1
    if board[ny][nx] == 'B':
        return count
    else:
        return 0

for j in range(n):
    for i in range(n):
        if board[j][i] == 'W' or board[j][i] == 'B':
            continue
        if board[j][i] == '.':
            for m in range(8):
                nx = i + dx[m]
                ny = j + dy[m]
                if nx < 0 or nx >= len(board) or ny < 0 or ny >= len(board):
                    continue
                elif board[ny][nx] == 'W' and board[j][i] == '.':  # valid
                    arr[j][i] += findblack(m, nx, ny)
                    
mx = 0
x = 0
y = 0
for j in range(n):
    for i in range(n):
        if int(arr[j][i]) > mx:
            mx = int(arr[j][i])
            x = i
            y = j
if mx == 0:
    print("PASS")
else:
    print(f"{x} {y}")
    print(mx)
  
profile
ML Product Engineer

0개의 댓글