개발/백준
파이썬 체스판 대각선 경로 구현 팁
센솔
2022. 7. 19. 11:38
체스판에서 대각선 경로를 구할 때 어떻게 구현을 해야 할까?
간단하게 보일 수도 있지만 막무가내로 구현하면 코드가 상당히 더러워질 수 있다.
백준 N-queen(9963), 비숍(1799) 문제에서 유용하게 활용할 수 있는 대각선 경로 판정 팁을 공유해본다.
# 보드판 사이즈
SIZE_X = 8
SIZE_Y = 8
def Diagonal(x, y, board):
for i in range(SIZE_Y):
for j in range(SIZE_X):
if abs(i-y) == abs(j-x):
board[i][j] = 1
board = [[0]*SIZE_X for _ in range(SIZE_Y)]
Diagonal(3, 3, board) # x, y 위치에 비숍 놓기
print(board)
절댓값을 이용하면 편하게 구할 수 있다.
x, y 위치에 비숍을 놓는다고 가정했을 때, 우선 이중 for문을 활용해 모든 칸을 훑어본다.
만약 |i-y| == |j-x| 라면 해당 칸은 대각선 경로에 있는 것이다.