본문 바로가기
CodeSignal

sudoku2

by Doromi 2024. 3. 6.
728x90
반응형
주어진 그리드가 유효한 스도쿠 퍼즐인지 확인하는 알고리즘을 구현해야 합니다.

스도쿠 퍼즐은 9 × 9 그리드에 1부터 9까지의 숫자를 중복되지 않게 채워넣는 것이 목표입니다.

각 행, 각 열, 그리고 3 × 3 크기의 서브 그리드(총 9개)에는 1부터 9까지의 숫자가 한 번씩만 나타나야 합니다.

 

bool solution(char[][] grid) {
    
    HashSet<string> rows = new HashSet<string>();
    HashSet<string> cols = new HashSet<string>();
    HashSet<string> subs = new HashSet<string>();
    
    for(int i = 0;i<9;i++){
        for(int j = 0;j<9;j++){
            char cell = grid[i][j];
            if(cell != '.'){ 
            		// 행 검사
                 	if (!rows.Add(cell + " in row " + i))
                        return false;

                    // 열 검사
                    if (!cols.Add(cell + " in col " + j))
                        return false;

                    // 서브 그리드 검사
                    int subGridRow = i / 3;
                    int subGridCol = j / 3;
                    if (!subs.Add(cell + " in subgrid " + subGridRow + "-" + subGridCol))
                        return false;
            }
        }
    }
    
        return true;
}
주어진 그리드를 행, 열 및 서브 그리드 단위로 검사하여 각 숫자가 한 번씩만 나타나는지 확인합니다.
HashSet<T>.Add 메서드의 반환 값은 새로운 요소가 성공적으로 추가되었는지 여부를 나타내는 bool 값입니다.
즉, 요소가 이미 집합에 있어서 추가되지 않았다면 false를 반환하고, 요소가 성공적으로 추가되었다면 true를 반환합니다. 따라서 rows.Add()가 false를 반환하면 이미 같은 값이 집합에 있음을 의미하기 때문에, 중복 값을 거를 수 있게 됩니다.
728x90
반응형

'CodeSignal' 카테고리의 다른 글

removeKFromList  (0) 2024.03.08
isCryptSolution  (0) 2024.03.07
rotateImage  (1) 2024.02.28
firstNotRepeatingCharacter  (0) 2024.02.27
Count Sum of Two Representations 2  (1) 2024.02.26