본문 바로가기
알고리즘/SWEA

SWEA D3 15612. 체스판 위의 룩 배치 (python)

by 개발하는 호랑이 2024. 2. 27.

체스판 위의 룩 배치

풀이

룩은 체스에서 가로 세로로 쭈우욱 갈 수 있는 녀석이다. 맞이 장기의 차와 같은 녀석이지.

이 녀석이 서로 영향을 안받게 8 by 8 칸의 보드판에 놓아져 있는지를 판단하는 문제이다.
룩이 안놓여 있는 곳은 '.'으로 룩이 놓여 있는 곳은 'O'로 되어있다.

총 8개의 룩이 놓여야 하는데, 그러면 우선
1. 행을 확인해서 한줄에 여러 개가 있거나, 아무것도 없으면 안 됨.
2. 열을 확인해서 이미 해당열에 룩이 있어도 안됨.
이 2가지를 판단하여 풀이를 했다.

그래서 아래처럼 풀이를 했고, 해결되었다.

def solution(board):
    # 열을 확인하기 위한 용도
    column = [0] * 8
    
    # 룩이 같은 열이나 같은 행에 있는지 확인
    for i in range(8):
        # 한줄에 여러개 있거나, 아무것도 없으면 안되는거
        if board[i].count('O') > 1 or board[i].count('O') == 0:
            return 'no'
        # 열을 검사하자.
        for j in range(0,8):
            # 이미 같은 열에 룩이 있으면 안됨
            if board[i][j] == 'O' and column[j]:
                return 'no'
            # 같은 열에 룩이 없으니까 pass
            elif board[i][j] == 'O' and not column[j]:
                column[j] = 1
    else:
        return 'yes'
T = int(input())
for testcase in range(1, T +1):
    # 크기는 8*8
    board = []
    for _ in range(8):
        board.append(input())
    answer = solution(board)
    
    print(f'#{testcase} {answer}')