프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

문제

https://www.acmicpc.net/problem/9663

 

9663번: N-Queen

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

풀이

bool board[14][14] : 퀸을 놓기가 가능하면 true로 저장해 둠.

 

void BanBoard(int r,int c) : r과 c 위치에 퀸을 둘 경우 양대각과 가로 세로의 board를 false로 변경

 

voidDfs(int column): column이 N이상일 경우만 cnt를 +1하고 나머지에서는 퀸을 하나씩 두며 Dfs 재귀 호출

board_copy를 선언해 이전의 board의 값을 저장해 두고 column의 row값을 for문으로 돈다.

만약 퀸을 두는 것이 가능하면 BanBoard를 호출 후 Dfs(column+1)를 재귀 호출해 다음 column에서 가능한 수를 찾는다.

후출 후 돌아온다면 이전의 board값으로 복구시키기 위해 copy_board값을 다시 넣어준다. 

 

소스코드

복기

if(column >= N) 부분에서 N-1과 비교해 한참을 헤맸다..

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함