import sys
input = sys.stdin.readline
N = int(input().strip())
pos = [0] * N # pos[i] = j 라면, 이는 i행j열에 퀸이 있음을 의미
result = 0 # 총 경우의 수
def position_check(row):
# 인자로 넘어온 row(행) 이전까지의 퀸 정보를 기반으로 퀸을 둘 수 있는 포지션인지 확인
for i in range(row):
if pos[i] == pos[row] or abs(pos[i] - pos[row]) == abs(i-row):
return False
return True
def solve(row_depth):
if row_depth == N:
result += 1
return
for col in range(N):
pos[row_depth] = col # 해당 행의 열 위치를 모두 확인
if position_check(row_depth) == True:
solve(row_depth+1) # 재귀함수 실행
solve(0)
sys.stdout.write(f"{result}\\n")
제가 재귀를 사용한 이유는 다음과 같습니다 :
행마다 동일한 로직을 수행한다
재귀함수는 내부에서 재귀적으로 실행되기 이전의 정보를 가지고 다음 함수를 실행합니다. 재귀함수는 종료 조건을 작성하는 게 중요한 부분 중 하나인데, 이때 행 정보를 이용해서 N과 동일할 경우 경우의 수를 증가시켜주면 되겠다는 생각을 했습니다.