체스판에서 대각선 경로를 구할 때 어떻게 구현을 해야 할까?
간단하게 보일 수도 있지만 막무가내로 구현하면 코드가 상당히 더러워질 수 있다.
백준 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| 라면 해당 칸은 대각선 경로에 있는 것이다.
'개발 > 백준' 카테고리의 다른 글
백준 2239: 스도쿠 (Python) (0) | 2022.07.19 |
---|---|
백준 1799번: 비숍 (Python) (0) | 2022.07.19 |
백준 1921번: 연속합 (Python) (0) | 2022.07.18 |
백준 2293번: 동전 1 (Python) (0) | 2022.07.14 |
백준 14499: 주사위굴리기 (Python) (0) | 2022.03.17 |