Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 체스판의 퀸이 주어진 셀을 공격할 수 있는지 확인하는 방법

체스판 위에 퀸(Queen)과 상대 말(Opponent)의 위치를 나타내는 두 좌표가 있다고 가정해 봅시다. 각각 Q와 O로 표시하며, 이때 퀸이 상대 말을 공격할 수 있는지 판별하는 것이 목표입니다.

체스 규칙에 따르면 퀸은 같은 행(가로), 같은 열(세로), 그리고 대각선 방향으로 이동하며 공격할 수 있습니다.

예를 들어 입력이 Q = (1, 1), O = (4, 4)라면, 두 좌표는 같은 대각선상에 있으므로 출력은 True가 됩니다.

문제 해결 접근 방식

퀸이 상대 말을 공격할 수 있는 조건은 다음 세 가지 중 하나라도 만족하면 됩니다.

  • Q의 x좌표와 O의 x좌표가 같으면 → True 반환 (같은 열)
  • Q의 y좌표와 O의 y좌표가 같으면 → True 반환 (같은 행)
  • |Q의 x좌표 − O의 x좌표| 와 |Q의 y좌표 − O의 y좌표|가 같으면 → True 반환 (대각선)

위 세 조건 중 어느 것도 만족하지 않으면 퀸이 상대를 공격할 수 없으므로 False를 반환합니다.

구현 예제

def solve(Q, O):
    if Q[0] == O[0]:
        return True
    if Q[1] == O[1]:
        return True
    if abs(Q[0] - O[0]) == abs(Q[1] - O[1]):
        return True
    return False

Q = (1, 1)
O = (4, 4)
print(solve(Q, O))

입력

(1, 1), (4, 4)

출력

True

코드 설명

함수 solve는 튜플 형태의 두 좌표 Q와 O를 받아 순서대로 세 가지 조건을 검사합니다. 먼저 x좌표가 같은지 확인하여 같은 열에 있는 경우를 처리하고, 다음으로 y좌표가 같은지 확인하여 같은 행에 있는 경우를 처리합니다. 마지막으로 두 좌표 간 x축 거리와 y축 거리의 절댓값이 동일한지 비교하여 대각선 관계인지 판단합니다. 모든 조건에 해당하지 않으면 False를 반환합니다.

이 알고리즘은 조건 검사만 수행하므로 시간 복잡도는 O(1)로, 매우 효율적으로 동작합니다.