본문 바로가기

프로그래밍/Spring Boot 프로젝트

[Spring Boot 프로젝트] 스도쿠 프로그래밍 - 3

반응형

코드

import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
    public static void main(String[] args) {        
        
        // 스도쿠 게임 구현
        final int SIZE = 3; // 스도쿠 배열의 크기 (행과 열)
        int[][] sudoku = new int[SIZE][SIZE]; 
        int[] iCnt = new int[10]; // 숫자 0~9의 등장 횟수를 저장할 배열
        List<Integer> randomList = new ArrayList<>(); // 랜덤 번호를 담을 List
        
        // 랜덤 번호 생성
        getRandomNo(randomList);
        // 스도쿠 배열에 랜덤 숫자를 채워넣고 출력
        printSudokuNo(randomList, sudoku, SIZE);
        // 0의 위치와 각 숫자의 등장 횟수 구하기
        findZeroLocation(iCnt, sudoku, SIZE);
        // 0에 들어갈 수 구하기
        findZeroValue(iCnt);
        
    }
    
    // 랜덤 번호 생성 함수 (0부터 9까지)
    public static void getRandomNo(List<Integer> randomList){
    
        // 0은 필수적으로 포함되므로 먼저 추가
        randomList.add(0);
        // 1 ~ 9의 숫자를 랜덤하게 추가
        int firstIdx = 1;	// (개인 스타일 : 반복문은 초기값을 0으로 시작하는 것이 좋으므로 변수로 따로 빼서 처리함)
        for (int i = firstIdx; i < 10; ++i){
            randomList.add(i);
        }
        // 리스트를 랜덤하게 섞기
        Collections.shuffle(randomList);
        
    }
    
    // 스도쿠 배열에 랜덤 숫자를 넣고 출력하는 함수
    public static void printSudokuNo(List<Integer> randomList, int[][] sudoku, int SIZE){
    
        int index = 0; 
        for (int i = 0; i < SIZE; ++i) {            
            for (int j = 0; j < SIZE; ++j) {
                sudoku[i][j] = randomList.get(index);
                index++;
                System.out.print(sudoku[i][j] + "\t"); // 현재 값 출력
                
            }
            System.out.println();
        }
        
    }
    
    // 스도쿠 배열에서 0의 위치와 각 숫자의 등장 횟수를 구하는 함수
    public static void findZeroLocation(int[] iCnt, int[][] sudoku, int SIZE){
    
        int findRow; // 0의 행 위치
        int findCol; // 0의 열 위치
        
        // 스도쿠 배열을 순차적으로 확인
        for (int i = 0; i < SIZE; ++i) {
            for (int j = 0; j < SIZE; ++j) {
                int counter = sudoku[i][j]; // 현재 숫자를 저장
                iCnt[counter]++; // 해당 숫자의 등장 횟수를 증가시킴
                
                // 0이 있는 위치를 찾으면 출력
                if (sudoku[i][j] == 0) { 
                    findRow = i;
                    findCol = j;
                    System.out.printf("0은 %d 행 %d 열에 있습니다.\n", findRow, findCol);
                }
            }
            System.out.println();
       }
       
	}
	
    // 0에 들어갈 수 구하는 함수
    public static void findZeroValue(int[] iCnt){
    
        int missNo; // 0에 들어갈 숫자
        
        // 등장 횟수가 0인 숫자를 찾아서 출력
        for (int i = 0; i < iCnt.length; ++i) { 
            if (iCnt[i] == 0) {
                missNo = i;
                System.out.println("0에 들어갈 숫자는 " + missNo);
            }
        }
        
    }
    
}
  • getRandomNo 함수
    • ArrayList 배열을 사용하여 랜덤 번호를 생성하도록 처리 
    • 랜덤번호 : 0 - 필수 포함, 1 ~ 9 - Collections.shuffle() 사용하여 섞기
  • printSudokuNo 함수
    • 랜덤 숫자를 꺼내고 스도쿠 배열에 저장 
  • findZeroLocation 함수
    • 숫자 0의 위치와 등장 횟수 구하기
  • findZeroValue 함수 
    • 0에 들어갈 수 구하기

 

반응형