프로그래머스 N-Queen C# 문제풀이

안또니오·2022년 11월 16일
0

CSharp

목록 보기
3/3
  public class Solution
    {
        int count = 0;
        List<List<bool>> board = new List<List<bool>>(12);
        public int solution(int n)
        {
            for(int i = 0; i < n; i++)
            {
                List<bool> row = new List<bool>(n);
                for(int j = 0; j < n; j++)
                {
                    row.Add(false);
                }
                board.Add(row);
            }
            dfs(board,ref count, 0);
            return count;
        }
        public void dfs(List<List<bool>> board, ref int count, int row)
        {
            if(row == board.Count)
            {
                count++;
                return;
            }
            for (int col = 0; col < board[row].Count; ++col)
            { 
                bool isOk = true;
                for (int i = row - 1, j = 1; i >= 0; --i, ++j)
                { 
                    bool con1 = board[i][col]; 
                    bool con2 = col - j >= 0 && board[i][col - j];
                    bool con3 = col + j <= board.Count - 1 && board[i][col + j]; 
                    if (con1 || con2 || con3)
                    { 
                        isOk = false;
                        break;
                    }
                }
                if (isOk)
                {  
                    board[row][col] = true;
                    dfs(board,ref count, row + 1);
                    board[row][col] = false; 
                }
            }
        }
    }
profile
2020. 11월 공부시작.

0개의 댓글