바위타는 두루미

8.12 여덟개의 퀸 본문

Study/Interview준비

8.12 여덟개의 퀸

DoRoMii 2019. 8. 5. 12:30
728x90

문제 

8*8 체스판 위에 여덟 개의 퀸(queen)이 서로 잡아 먹히지 않도록 놓을 수 있는 모든 가능한 방법을 출력하는 알고리즘을 작성하라.

즉, 퀸은 서로 같은 행, 열, 대각선 상에 놓이면 안된다. 여기서 '대각선'은 모든 대각선을 의미하는 것으로 체스판을 양분하는 대각선 두개로 한정하지 않는다. 

 

해결법

한 열에 하나씩 놓고 다음 놓는 말은 이전 열들과 규칙을 지키면서 놓을 수 있는 모든 경우의 수를 놓아가면서 가장 끝가지 경우를 만들어 가고 , 갈 곳이 없다면 다시 돌아와서 다른 경우의 길로 선택해 가는 것을 반복하는 backtracking 기법을 이용하면 해결 할 수 있다.

def Solution():
    result = []
    queens = [-1]*8

def isVaild(queens, index , place) :
    for i in range(index):
        if queens[i] == place :
            return False
        if index - i == abs(queens[i] - place):
            return False
    return True

def placeQueen(queens, index, result):
    if index == 8 :
        result.append(queens)
    for i in range(8)
        if isVaild(queens, index, i):
            queens[index] = i
            placeQueen(queens, index+1, result)

'Study > Interview준비' 카테고리의 다른 글

8.14 불린 값 계산  (0) 2019.08.05
8.13 박스 쌓기  (0) 2019.08.05
8.11 코인  (0) 2019.08.05
8.10 영역 칠하기  (0) 2019.08.05
8.9 괄호  (0) 2019.08.05
Comments