반응형
하,, 너무 오랜만에 풀어서인지,,, 진짜 사소한거 하나부터 다 걸렸다ㅠㅠ
이래서 공부를 해야합니다... 꾸준히....
진짜 제일 시간 많이 버린 건 노트북 visual studio 에서 풀 때는 1~10 모두 옳은 경우의 수로 잘 나오는데,,,
SW Expert Academy에서 풀면 4가 계속 1이 나왔음
후,,, 삽질,,,
이유는 boundary check안해줘서!
대각선 부분 확인할 때, visual studio에서는 배열의 -1,-2,,,,를 접근하면 알아서 넘어갔는데
SW Expert Academy는 아니니까 ㅠㅠㅠㅠㅠㅠㅠㅠ
멍청이...
이 부분입니다.....
Boundary check 까먹지맙시다,,,
#include < iostream > #include < string.h > // malloc #include < string > // cin>>str using namespace std; // N Queen 경우의 수 int answer; int sizeArr; int arr[10][10]; int visited[10] = { 0, }; // 열 체크 // 대각선 체크 // _r,_c 에 queen을 놓아도 되면 return 1 int isAvailable(int _r, int _c) { // 대각선 체크 int row = _r-1, col = _c-1; while (row > -1 && col > -1) { if (arr[row][col] == 1) { return 0; } row--, col--; } row = _r-1, col = _c+1; while ( (row < sizeArr && row > -1) && col < sizeArr) { if (arr[row][col] == 1) { return 0; } row--, col++; } return 1; } void func(int _row) { if (_row == sizeArr) { answer++; } for (int c = 0; c < sizeArr; c++) { if (visited[c] == 0 && isAvailable(_row,c)==1) { // 열 & 대각선 체크 visited[c] = 1; // 방문 arr[_row][c] = 1; func(_row + 1); // 다음 행 visited[c] = 0; // 방문 초기화 arr[_row][c] = 0; } } } int main(void) { int tc; cin >> tc; for (int i = 1; i <= tc; i++) { answer = 0; // 초기화 cin >> sizeArr; func(0); cout << '#' << i << ' ' << answer << endl; } return 0;
반응형