체스판 위의 룩 배치
풀이
룩은 체스에서 가로 세로로 쭈우욱 갈 수 있는 녀석이다. 맞이 장기의 차와 같은 녀석이지.
이 녀석이 서로 영향을 안받게 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}')
'알고리즘 > SWEA' 카테고리의 다른 글
SWEA D3 12368. 24시간 (python) (1) | 2024.02.28 |
---|---|
SWEA D3 13218. 조별과제 (python) (0) | 2024.02.28 |
SWEA D3 6485. 삼성시의 버스 노선 (python) (0) | 2024.02.27 |
SWEA D3 13428. 숫자 조작 (python) (1) | 2024.02.27 |
SWEA D3 14692. 통나무 자르기 (python) (1) | 2024.02.27 |