병훈1234 2021. 7. 16. 22:59

풀이 과정


  1. 재귀 함수를 활용함.
  2. i행 기준으로 모든 열을 탐색하면서 0~i-1행까지 존재하는 퀸들과 충돌하지 않는지 확인(같은 열이거나 대각선에 존재하거나)
  3. (2)번이 통과한다면 현재 단계에서의 퀸을 리스트에 넣어준 후 다음 단계로 이동
  4. 전체 행 진행하였다면 정답을 1 증가(answer)

answer = 0
def check(x1, y1, x2, y2):
    if abs(y2 - y1) == abs(x2 - x1):
        return True
    else:
        return False

def queen(current, row, n):
    global answer

    if row == n:
        answer += 1
        return

    for i in range(n):
        skip = False
        for x1, y1 in current:
            if y1 == i or check(row, i, x1, y1):
                skip = True
                break

        if not skip:
            queen(current+[[row, i]], row+1, n)

    return

def solution(n):
    global answer
    queen([], 0, n)
    return answer

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges