Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 비트마스크
- 우박수열정적분
- 이중지도
- [pccp 기출문제]
- JS스터디
- 프로그래머스
- 코어자바스크립트
- pccp기출문제
- React.StrictMode
- DP
- 타겟넘버
- 정렬
- 백준 알고리즘
- 과제진행하기
- JS
- solved.ac골드
- 스택
- 지도 여러개
- 최소스패닝트리
- 2023카카오블라인드코테
- 5강클로저
- Lv3
- solved.ac플래티넘
- div2개
- 알고리즘 문제풀이
- Lv2
- 두원사이의정수쌍
- c++
- 알고리즘문제풀이
- 백준알고리즘
Archives
- Today
- Total
호지
[백준 알고리즘] 2239번 스도쿠 문제풀이 본문
DFS를 활용한 스도쿠 문제풀이이다.
list벡터에 보드가 0일때 위치, 즉 1~9값이 채워져야하는 곳의 위치를 저장한다
DFS의 인자 level은 list벡터의 index위치이고, value는 1~9값 중 하나를 뜻한다
i가 0~9일 때,
board[nx][i](가로)
board[i][ny](세로)
, board[nx/3*3+i/3][ny/3*3+i%3](3*3 정사각형)
이 value값인지 확인하고 가로,세로,3*3정사각형에 같은 value가 있다면 해당 dfs를 종료한다.
아니라면 해당 level 위치의 board값을 value로 하고,
level+1이면서 value 0~9일 때 DFS를 호출한다.
level이 list.size()-1이면 스도쿠를 다 채웠을 때이므로,
결과값을 출력한 후 exit(0)을 호출하여 프로그램을 종료한다.
#include <iostream>
#include <vector>
using namespace std;
int board[9][9];
struct pos{
int x;
int y;
pos(int a, int b){
x =a;
y =b;
}
};
vector<pos> list;
void DFS(int level, int value){
int nx =list[level].x;
int ny =list[level].y;
for(int i=0; i<9; i++)
if(board[nx][i] == value || board[i][ny] == value ||
board[nx/3*3+i/3][ny/3*3+i%3] == value)
return;
if(level == list.size()-1){
board[nx][ny] = value;
for(int i=0; i< 9; i++){
for(int j=0; j<9; j++){
cout << board[i][j];
}
cout << endl;
}
exit(0);
}
else{
for(int i=1; i<=9; i++){
board[nx][ny] = value;
DFS(level+1, i);
board[nx][ny] = 0;
}
}
}
int main(){
char input;
for(int i=0; i< 9; i++){
for(int j=0; j<9; j++){
cin >> input;
board[i][j] = input -'0';
if(board[i][j]==0){
list.push_back(pos(i,j));
}
}
}
for(int i=1; i<=9; i++){
DFS(0, i);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 알고리즘] 2342번 Dance Dance Revolution 문제풀이 c++ (0) | 2022.06.10 |
---|---|
[백준 알고리즘] 2252번 줄세우기 문제풀이 c++ (0) | 2022.06.10 |
[백준 알고리즘] 2166번 다각형의 면적 (0) | 2022.06.08 |
[백준 알고리즘] 2162번 선분 그룹 c++ (0) | 2022.05.21 |
[백준 알고리즘] 2143번 두 배열의 합 문제풀이 c++ (0) | 2022.05.07 |
Comments