connecting the dots
[SWEA/Java] 1974 : 스도쿠 검증 본문
문제
swexpertacademy.com/main/code/problem/problemDetail.do
난이도
D2
풀이
세로, 가로는 for문을 돌려 검증해주었고 3x3 짜리 작은 격자를 확인할 때는 [0][0] - [0][3] - [0][6] 처럼 격자의 가장 왼쪽 위의 인덱스를 파라미터로 넘겨 verifySmallGrid라는 메소드에서 검증해주었다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class SW1974 {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static int[][] puzzle = new int[9][9];
static int[] count = new int[11];
static int pass;
public static void main(String[] args) throws NumberFormatException, IOException {
int test_case = Integer.parseInt(in.readLine());
for (int tc = 1; tc <= test_case; tc++) {
System.out.print("#" + tc + " ");
pass = 1;
// 입력받기
for (int i = 0; i < 9; i++) {
st = new StringTokenizer(in.readLine(), " ");
for (int j = 0; j < 9; j++) {
puzzle[i][j] = Integer.parseInt(st.nextToken());
}
}
// 세로 검증
for (int j = 0; j < 9; j++) {
setCountZero();
for (int i = 0; i < 9; i++) {
count[puzzle[i][j]]++;
if (count[puzzle[i][j]] == 2) {
pass = 0;
i = 9;
break;
}
}
}
// 가로 검증
for (int i = 0; i < 9; i++) {
setCountZero();
for (int j = 0; j < 9; j++) {
count[puzzle[i][j]]++;
if (count[puzzle[i][j]] == 2) {
pass = 0;
i = 9;
break;
}
}
}
// 작은 격자 검증
for(int i = 0; i < 9; i += 3) {
for(int j = 0; j < 9; j += 3) {
int result = verifySmallGrid(i , j);
if(result == 0) {
pass = 0;
i = 9;
break;
}
}
}
//모든 검증 통과
System.out.println(pass);
}
}
// x,y 지점으로부터 3x3만큼을 검증
private static int verifySmallGrid(int x, int y) {
setCountZero();
for(int i = x; i < x+3; i++) {
for(int j = y; j < y+3; j++) {
count[puzzle[i][j]]++;
if(count[puzzle[i][j]] == 2) {
return 0;
}
}
}
return 1;
}
private static void setCountZero() {
for (int i = 0; i < 11; i++) {
count[i] = 0;
}
}
}
느낀점
이중 for문을 빠져나올 때 loop에 이름을 붙여주고 break;하는 방법도 있지만 가장 바깥 for문이 범위를 벗어나도록 하는 방법도 있음을 알게 됐다
'algorithm > SWEA' 카테고리의 다른 글
[SWEA/Java] 1707 : 프로세서 연결하기 (0) | 2021.03.19 |
---|---|
[SWEA/Java] 1247 : 최적경로 (0) | 2021.02.18 |
[SWEA / Java] 1861 : 정사각형 방 (0) | 2021.02.08 |
[SWEA / Java] 1208 : Flatten (0) | 2021.02.07 |
[SWEA / Java] 1210 : Ladder1 (0) | 2021.02.07 |