일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- python 강좌
- python 강의
- 2020
- 라즈베리파이 모니터
- 파이썬 강좌
- mmcv
- 인생
- 파이썬 강의
- 계획
- 프로그래밍
- 파이썬
- BOJ
- 슬픔
- 철학
- C++
- 자작시
- 백준
- 알고리즘
- dynamic programming
- it
- dp
- 공부
- 강좌
- 2021
- 2024
- 강의
- 다이나믹프로그래밍
- python
- 자살
- mmdetection
Archives
- Today
- Total
Stargazer
[백준] 2239번: 스도쿠 C++ (백트래킹) 본문
반응형
접근:
스도쿠 자체로 크기가 9x9로 정해 있기 때문에, 백 트래킹 이 가능한 크기다.
따라서 백트래킹으로 하나씩 전부 조사하되
사전식으로 조사하면 된다.
전략:
앞에서 부터 하나씩 입력 받을 때, 0의 위치와 갯수를 입력받아서
백트래킹으로 각 점을 대입하면서 답을 찾아본다.
코드:
#include <iostream>
#include <vector>
using namespace std;
int map[9][9];
int cnt = 0;
bool flag = false;
vector<pair<int,int>> vac;
bool visit[81] ={false,};
void print(){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
cout << map[i][j];
}
cout <<'\n';
}
}
bool possible(int x, int y, int num){
//row , col
for(int i=0;i<9;i++){
if(map[y][i] == num || map[i][x] == num)
return false;
}
//box
int st_x = x/3;
int st_y = y/3;
for(int i=0;i<3;i++){
for(int j=0;j < 3;j++){
if(map[st_y*3 + i][st_x*3 + j] == num) return false;
}
}
return true;
}
void dfs(int c){
if(c == cnt){
print();
flag = true;
return;
}
if(visit[c]) return;
visit[c] = true;
int x = vac[c].first;
int y = vac[c].second;
for(int k=1;k<=9;k++){
if(possible(x , y, k)){
map[y][x] = k;
dfs(c+1);
if(flag) return;
map[y][x] = 0;
}
}
if(flag) return;
visit[c] = false;
}
int main(){
for(int i=0;i<9;i++){
string str;
cin >> str;
for(int j=0;j<9;j++){
map[i][j] = (int)(str[j] - '0');
if(map[i][j] == 0) {
vac.push_back({j,i}); // x , y
cnt++;
}
}
}
dfs(0);
return 0;
}
반응형
'Undergraudate basics(학부생 기초) > 자료구조, 알고리즘' 카테고리의 다른 글
[백준] 2473번 : 세 용액 C++ (두 포인터) (0) | 2022.07.09 |
---|---|
[백준] 2252번 : 줄 세우기 C++ (위상정렬) (0) | 2022.07.05 |
[백준] 1644번: 소수의 연속합 c++ 풀이 (에라토스테네스의 체, 투 포인터) (0) | 2022.06.25 |
[백준] 1305번 : 광고 (KMP 알고리즘) c++ 풀이 (0) | 2022.05.29 |
[백준] 1202번 : 보석 도둑 (그리디 알고리즘) C++ 풀이 (0) | 2022.05.20 |
Comments