2 ๋ถ„ ์†Œ์š”

๐Ÿ“ [G4_2239] ์Šค๋„์ฟ 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
	static int[][] map;
	static ArrayList<int[]> list;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		// ํŒ
		map = new int[9][9];

		list = new ArrayList<int[]>();

		for (int i = 0; i < 9; i++) {
			String str = br.readLine();
			String[] sstr = str.split("");
			for (int j = 0; j < 9; j++) {
				map[i][j] = Integer.parseInt(sstr[j]);

				if (map[i][j] == 0) {
					list.add(new int[] { i, j });
				}
			}
		}

		perm(0);

	}

	// ์ˆœ์—ด
	static void perm(int idx) {

		// ๊ธฐ์ €์กฐ๊ฑด
		if (list.size() == idx) {
			output();
            // ์ฆ‰ ์‹œ ์ข… ๋ฃŒ !!!
			System.exit(0);
		}

		// ์ขŒํ‘œ ๊ธฐ๋ก
		int x = list.get(idx)[1];
		int y = list.get(idx)[0];

		// 1 ~ 9 ๊นŒ์ง€ ์‚ฌ์šฉ๋œ ์ˆซ์ž ์ฒดํฌ true
		boolean[] v = new boolean[10];

		// ํ–‰ํ™•์ธ
		check_row(x, y, v);
		// ์—ดํ™•์ธ
		check_col(x, y, v);
		// 3*3 ํ™•์ธ
		int startX = (x / 3) * 3;
		int startY = (y / 3) * 3;
		check(startX, startY, v);
		
		for(int i=1; i<10; i++) {
			// ์•„์ง ์ˆ˜๋ฅผ ๋„ฃ์ง€ ์•Š์€ ์ž๋ฆฌ๋ฉด
			if(!v[i]) {
				map[y][x] = i;
				perm(idx+1);
				// ๋ฐฑํŠธ๋ž˜ํ‚น
				map[y][x] = 0;
			}
		}

	}

	// 3*3 ๋ฐฐ์—ด ํ™•์ธ
	static void check(int x, int y, boolean[] v) {
		for (int i = y; i < y + 3; i++) {
			for (int j = x; j < x + 3; j++) {
				if (map[i][j] != 0) {
					v[map[i][j]] = true;
				}
			}
		}
	}

	// ํ–‰ํ™•์ธ -> ์ด๋ฏธ ๋ณธ์ธ ๊ฐ’์ด ์žˆ์œผ๋ฉด false , ์•„๋‹ˆ๋ฉด true
	static void check_row(int x, int y, boolean[] v) {
		for (int i = 0; i < 9; i++) {
			if (map[y][i] != 0)
				v[map[y][i]] = true;
		}
	}

	// ์—ดํ™•์ธ -> ์ด๋ฏธ ๋ณธ์ธ ๊ฐ’์ด ์žˆ์œผ๋ฉด false , ์•„๋‹ˆ๋ฉด true
	static void check_col(int x, int y, boolean[] v) {
		for (int i = 0; i < 9; i++) {
			if (map[i][x] != 0)
				v[map[i][x]] = true;
		}
	}

	// ์Šค๋„์ฟ  ์ถœ๋ ฅํ•˜๋Š” ๋ถ€๋ถ„
	static void output() {
		for (int i = 0; i < 9; i++) {
			for (int j = 0; j < 9; j++) {
				System.out.print(map[i][j]);
			}
			System.out.println();
		}
	}
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

์ด ๋ฌธ์ œ๋Š” ์Šค๋„์ฟ  ๋ฌธ์ œ์ด๋‹ค. ์‚ฌ์‹ค ํ–‰, ์—ด, 33 ๋ฐฐ์—ด ์ผ๋•Œ 1~9๊ฐ€ ๋งž์•„์•ผ๋œ๋‹ค ๋ง๊ณ ๋Š” ๋‹ค๋ฅธ ์“ธ ๋งŒํ•œ ์Šค๋„์ฟ  ํ‘ธ๋Š” ์ •๋ณด๊ฐ€ ํ•„์š”์—†๋‹ค.
์‚ฌ์‹ค ์Šค๋„์ฟ ๋ฅผ ์‹ค์ œ๋กœ ํ’€ ๋•Œ๋Š” 1~9 ์ˆซ์ž๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ๋ถ„ํฌํ•ด์žˆ๋Š” ์ •๋ณด๋ถ€ํ„ฐ ํ‘ธ๋Š” ํŒ์ด ์žˆ๋Š”๋ฐ ๊ทธ ํŒ์€ ๋ณ„๋กœ ์“ธ๋ชจ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค.. ใ…‹ใ…‹
3๊ฐ€์ง€ ์กฐ๊ฑด ( ํ–‰, ์—ด, 3
3 ๋ฐฐ์—ด)์„ ์„ฑ๋ฆฝํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„œ๋“œ๋กœ ๋”ฐ๋กœ ๋นผ๋†“์•˜๊ณ ,
์ขŒํ‘œ๋ฅผ list์— ์ €์žฅํ•ด์„œ ์ˆœ์—ด์„ ์ด์šฉํ•˜์˜€๋‹ค.
์ˆœ์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ ์ด์œ ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ 3๊ฐ€์ง€ ์กฐ๊ฑด์•ˆ์—์„œ 9์ค‘์— 1๊ฐ€์ง€ ์ˆซ์ž๋ฅผ ์„ ํƒํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ˆœ์„œ๋„ ์ƒ๊ด€์ด ์žˆ๊ณ .
boolean ๋ฐฐ์—ด์„ ๊ฐ€์ง€๊ณ  1~9 ๊นŒ์ง€ ์•„์ง ์“ฐ์ด์ง€ ์•Š์€ ์ˆ˜๋ฅผ ๋„ฃ๊ณ  ๋‹ค์‹œ ๋นผ๊ณ  ๋ฐฑํŠธ๋ž˜ํ‚น ํ•˜๊ณ ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•ด์ฃผ์—ˆ๋‹ค.
ํ‚คํฌ์ธํŠธ !!
๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ์ตœ์†Œ์ธ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•˜๋ผ๊ณ  ๋˜์–ด์žˆ๋Š”๋ฐ ์ด ๋ถ€๋ถ„์€ ์ฒ˜์Œ ์ˆœ์—ด์˜ ๊ธฐ์ €์กฐ๊ฑด์„ ๋งŒ๋‚˜๋ฉด ๋ฐ”๋กœ ์ถœ๋ ฅํ•ด์„œ ๋๋‚ด๋„๋ก ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.
์ด ๋ถ€๋ถ„์ด ์—†์œผ๋ฉด ๋‹ต์ด ์•ˆ ๋‚˜์˜ฌ๊ฒƒ์ด๋‹ค. ๋‹ค 0 ์ธ๊ฒฝ์šฐ ํ•ด๊ฐ€ ๊ณ„์†ํ•ด์„œ ๋‚˜์˜จ๋‹คโ€ฆ ใ…Ž

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: