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
- RDD
- JIT
- pg_hba.conf
- 바이트코드
- java
- StackArea
- 42seoul
- jdk
- 자바컴파일러
- 이노베이션아카데미
- 42서울
- 포함관계
- Compiler
- LSP
- 라피신
- la-piscine
- classloader
- 운영체제
- SRP
- abstract
- javac
- Operating System
- JVM
- 도커네트워크
- 상속관계
- 참조변수
- MethodArea
- 제네릭스
- generics
- HeapArea
Archives
- Today
- Total
while(1) 작심삼일();
[백준 2580번] 스도쿠 본문
https://www.acmicpc.net/problem/2580
2580번: 스도쿠
스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루
www.acmicpc.net
풀이)
백트래킹으로 현재 위치(0)에서 가능한 경우의 수를 구하고 가능하면 해당 숫자를 넣고 dfs를 돌리고 다시 나왔을 때는 다른 수를 넣어야하므로 0으로 다시 처리를 해두었다. 만들 수 있는 경우의 수가 여럿있어서(?) 기재조건에 exit(0) - 정상종료를 시키지 않았더니 틀렸다고 채점되었다(..? 시간초과가 아닌..) 여튼.. 그래서 넣어두었다.
#include <iostream>
#include <vector>
using namespace std;
int map[9][9];
vector<pair<int, int> > v;
int rowCheck(int x, int y, int n)
{
for (int i = 0; i < 9; i++)
if (n == map[x][i])
return (0);
return (1);
}
int columnCheck(int x, int y, int n)
{
for (int i = 0; i < 9; i++)
if (n == map[i][y])
return (0);
return (1);
}
int SquareCheck(int x, int y, int n)
{
int sx = (x / 3) * 3;
int sy = (y / 3) * 3;
for (int i = sx; i < sx + 3; i++)
for (int j = sy; j < sy + 3; j++)
if (n == map[i][j])
return (0);
return (1);
}
int dfs(int x, int y, int n)
{
if (n == v.size() + 1)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
cout << map[i][j] << " ";
cout << "\n";
}
exit(0);
}
for (int i = 1; i <= 9; i++)
{
if (rowCheck(x, y, i) && columnCheck(x, y, i) && SquareCheck(x, y, i))
{
map[x][y] = i;
dfs(v[n].first, v[n].second, n + 1);
map[x][y] = 0;
}
}
return (0);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cin >> map[i][j];
if(map[i][j] == 0)
v.push_back(make_pair(i,j));
}
}
dfs(v[0].first, v[0].second, 1);
return (0);
}
제 코드는 절대 완벽하지 않습니다
더 좋은 풀이방법 혹은 코드에 관한 질문이 있으시면 언제든 댓글주세요!
'CS > baekjoon' 카테고리의 다른 글
[백준 17406번] 배열 돌리기 4 (0) | 2021.04.12 |
---|---|
[백준 17142번] 연구소 3 (0) | 2021.04.10 |
[백준 2573번] 빙산 (0) | 2021.04.09 |
[백준 2458번] 키 순서 (0) | 2021.04.09 |
[백준 17135번] 캐슬 디펜스 (0) | 2021.04.08 |
Comments