스쳐가는비
devtravel
스쳐가는비
전체 방문자
오늘
어제
  • 분류 전체보기 (108)
    • 🎵 Daily (0)
    • 📚 Computer Science (11)
      • Algorithm (9)
      • Design Pattern (2)
    • 🔥 Programming (23)
      • C# (3)
      • C++ (5)
      • WPF (0)
      • Python (1)
      • OpenCV (9)
      • ML & DL (5)
    • 🔥 Web (13)
      • HTML (6)
      • JavaScript (7)
    • 📌 Tool (2)
      • Git (2)
      • Etc (0)
    • 📖 Certificate (10)
      • 컴활 1급 (2)
      • SQL 개발자 (2)
      • 리눅스 마스터 (0)
      • 정보처리기사 (0)
      • 사무자동화산업기사 (0)
      • ADsP (6)
    • 💻 OnlineJudge (49)
      • Baekjoon (49)
      • GoormEdu (0)
GitHub Contribution
Loading data ...

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
스쳐가는비

devtravel

[백준 / BOJ] C++ 2580 스도쿠
💻 OnlineJudge/Baekjoon

[백준 / BOJ] C++ 2580 스도쿠

2022. 8. 2. 14:54

백준  - 단계별로 풀어보기 [2580]

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

 

2580번: 스도쿠

스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루

www.acmicpc.net

풀이

가로, 세로 줄에는 1부터 9까지의 숫자가 한번씩만 나타나야합니다. 

3x3 정사각형 안에서도 1부터 9까지의 숫자가 한번만 나타나야한다. 

스도쿠 판의 좌표 (x,y) 에 넣는 숫자 num은 값의 존재유무판단을 우선적으로 한 이후, 위의 조건에 해당하지 않을 경우에만

값을 넣어주는 식으로 진행했습니다.

 

sudoku[9][9]의 끝 좌표까지 탐색한 경우 결과를 출력하고 종료합니다.

 

Code

#include <iostream>
using namespace std;

int sudoku[9][9];

bool check(int y, int x, int num) {
    for (int i = 0; i < 9; i++) {
        if (sudoku[y][i] == num) return false;
        if (sudoku[i][x] == num) return false;
    }

    for (int i = (y / 3) * 3; i < (y / 3) * 3 + 3; i++)
        for (int j = (x / 3) * 3; j < (x / 3) * 3 + 3; j++)
            if (sudoku[i][j] == num) return false;

    return true;
}

void func(int y, int x) {
    if (x == 9) { y++; x = 0; }

    if (y == 9) {
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++)
                cout << sudoku[i][j] << " ";
            cout << endl;
        }
        exit(0);
    }

    if (sudoku[y][x] != 0) {
        func(y, x + 1);
        return;
    }

    for (int i = 1; i <= 9; i++) {
        if (check(y, x, i)) {
            sudoku[y][x] = i;
            func(y, x + 1);
            sudoku[y][x] = 0;
        }
    }
}

int main() {
    for (int i = 0; i < 9; i++)
        for (int j = 0; j < 9; j++)
            cin >> sudoku[i][j];

    func(0, 0);

    return 0;
}

'💻 OnlineJudge > Baekjoon' 카테고리의 다른 글

[백준 / BOJ] C++ 10773 제로  (0) 2022.08.16
[백준 / BOJ] C++ 24416 피보나치 수열 1  (0) 2022.08.03
[백준 / BOJ] C++ 3053 택시 기하학  (0) 2022.07.20
[백준 / BOJ] C++ 2477 참외밭  (0) 2022.07.18
[백준 / BOJ] C++ 4153 직각삼각형  (0) 2022.07.14
    '💻 OnlineJudge/Baekjoon' 카테고리의 다른 글
    • [백준 / BOJ] C++ 10773 제로
    • [백준 / BOJ] C++ 24416 피보나치 수열 1
    • [백준 / BOJ] C++ 3053 택시 기하학
    • [백준 / BOJ] C++ 2477 참외밭
    스쳐가는비
    스쳐가는비
    The biggest risk is not taking any risk

    티스토리툴바