본문 바로가기
알고리즘

[알고리즘 공부] 3. N-Queens 문제

by 플라퉁 2024. 6. 4.
728x90
반응형

 

 

 

 

안녕하세요 오늘은 N-Queens 문제에 대해 알아보겠습니다.

 

N-Queens 문제란?

N x N 체스판에서 N 개의 퀸을 서로 공격하지 못하게 배치하는 방법에 관한 문제입니다.

 

# 이 함수는 N-Queens 문제를 해결하고 가능한 모든 배치를 반환합니다. 
# 내부에 두 개의 중첩 함수(is_safe와 solve)를 사용하여 재귀적으로 문제를 해결합니다.
def solve_n_queens(n):
    # is_safe 함수는 현재 위치에 퀸을 놓는 것이 안전한지를 확인합니다. 
    # 현재 위치 (row, col)에서 이전 행들을 검사하여 다음 세 가지 조건을 만족하는지 확인합니다
    def is_safe(board, row, col):
        for i in range(row):
            # 같은 열에 다른 퀸이 있는지
            # 좌상향 대각선에 다른 퀸이 있는지
            # 우상향 대각선에 다른 퀸이 있는지
            if board[i] == col or \
               board[i] - i == col - row or \
               board[i] + i == col + row:
                return False
        return True

    # solve 함수는 재귀적으로 각 행에 퀸을 놓는 작업을 수행합니다. 
    # 각 행에 대해 모든 열을 검사하며, 퀸을 놓을 수 있는 안전한 위치를 찾습니다. 
    # 퀸을 놓을 수 있으면 다음 행으로 재귀 호출을 진행합니다. 
    # 마지막 행에 도달하면 하나의 해결 방법을 찾은 것이므로 결과 리스트에 현재 보드를 추가합니다.
    def solve(board, row):
        if row == n:
            result.append(board[:])
            return
        for col in range(n):
            if is_safe(board, row, col):
                board[row] = col
                solve(board, row + 1)
                board[row] = -1

    result = []
    solve([-1] * n, 0)
    return result

# 테스트
n = 4
solutions = solve_n_queens(n)
print(len(solutions))  # 출력: 2 (두 가지 해결 방법 존재)
for solution in solutions:
    print(solution)

 

 

응용 분야

N-Queens 문제의 해결 방법은 여러 실생활 문제에 응용될 있습니다

 

병렬 처리 자원 할당:

프로세스나 작업을 병렬로 수행할 자원을 효율적으로 할당하는 문제를 해결하는 사용될 있습니다.

 

VLSI 회로 설계:

VLSI (Very-Large-Scale Integration) 회로 설계에서 회로 요소들을 배치하는 문제를 해결할 사용됩니다.

 

로봇 경로 계획:

로봇이나 드론의 경로를 계획할 충돌을 피하면서 최적의 경로를 찾는 사용할 있습니다.

 

스케줄링 문제:

작업이나 이벤트를 시간표에 배치할 충돌 없이 효율적으로 배치하는 문제를 해결하는 사용됩니다.

 

게임 개발:

게임 AI에서 캐릭터나 요소들의 위치를 배치할 충돌 없이 최적의 배치를 찾는 문제를 해결하는 사용될 있습니다.

이와 같이 N-Queens 문제는 최적화, 자원 배치 스케줄링과 관련된 다양한 분야에서 응용될 있습니다.

 

 

 

728x90
반응형

댓글