From 62727044022c453b656dfb39a0002dc3aec57e59 Mon Sep 17 00:00:00 2001 From: nathan29849 Date: Tue, 14 Mar 2023 09:09:39 +0900 Subject: [PATCH] =?UTF-8?q?[nathan]=20=ED=8D=BC=EC=A6=90=EC=A1=B0=EA=B0=81?= =?UTF-8?q?=20=EC=B1=84=EC=9A=B0=EA=B8=B0=20java=20=ED=92=80=EC=9D=B4=20?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...261\204\354\232\260\352\270\260_0314.java" | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 "nathan/java/src/main/java/org/example/mar/\355\215\274\354\246\220\354\241\260\352\260\201\354\261\204\354\232\260\352\270\260_0314.java" diff --git "a/nathan/java/src/main/java/org/example/mar/\355\215\274\354\246\220\354\241\260\352\260\201\354\261\204\354\232\260\352\270\260_0314.java" "b/nathan/java/src/main/java/org/example/mar/\355\215\274\354\246\220\354\241\260\352\260\201\354\261\204\354\232\260\352\270\260_0314.java" new file mode 100644 index 0000000..54ba7e1 --- /dev/null +++ "b/nathan/java/src/main/java/org/example/mar/\355\215\274\354\246\220\354\241\260\352\260\201\354\261\204\354\232\260\352\270\260_0314.java" @@ -0,0 +1,110 @@ +package org.example.mar; + +import java.util.*; + +public class 퍼즐조각채우기_0314 { + + int N; + int PN; + int[][] gameBoard; + int[][] d = new int[][]{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; + List> permutations = new ArrayList<>(); + List> places = new ArrayList<>(); + + public int solution(int[][] game_board, int[][] table) { + int answer = 0; + + N = gameBoard.length; + gameBoard = new int[3*N-2][3*N-2]; + for (int i = N; i < 2*N; i++) { + for (int j = N; j < 2*N; j++) { + gameBoard[i][j] = game_board[N-i][N-j]; + } + } + // init(gameBoard, 0, places); // 빈 지역을 리스트에 추가 + // PN = places.size(); // 빈지역 리스트의 원소 개수만큼 순열 만들기 + // backTracking(new ArrayList<>(), new boolean[PN]); + +// +// for (int i = 0; i < 4; i++) { +// gameBoard = rotate(gameBoard); +// for (int i = 0; i < 3*N - 2; i++) { +// for (int j = 0; j < 3*N - 2; j++) { +// +// } +// } +// +// } + + + + return answer; + } + + + + int[][] rotate(int[][] table) { + int[][] newTable = new int[N][N]; + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + newTable[j][N-1-i] = table[i][j]; + } + } + + return newTable; + } + + + void init(int[][] board, int diff, List> arr) { // diff : board일 때 0, block일 때 1 + boolean[][] visited = new boolean[N][N]; + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + if (board[i][j] == diff && !visited[i][j]) { + List place = new ArrayList<>(); + visited[i][j] = true; + place.add(new int[]{i, j}); + diff += 1; + diff %= 2; + dfs(i, j, place, board, diff, visited); + arr.add(place); + } + } + } + } + + void dfs(int x, int y, List place, int[][] board, int diff, boolean[][] visited) { + int nx, ny; + for (int i = 0; i < 4; i++) { + nx = x + d[i][0]; + ny = y + d[i][1]; + if (checkRange(nx, ny)) { + if (board[nx][ny] == diff && !visited[nx][ny]) { + visited[nx][ny] = true; + place.add(new int[]{nx, ny}); + dfs(nx, ny, place, board, diff, visited); + } + } + } + } + + boolean checkRange(int x, int y) { + return 0 <= x && x < N && 0 <= y && y < N; + } + + void backTracking(List arr, boolean[] visited) { + if (arr.size() == PN) { + permutations.add(arr); + return; + } + + for (int i = 0; i < PN; i++) { + if (!visited[i]) { + visited[i] = true; + List tmp = new ArrayList<>(arr); + tmp.add(i); + backTracking(tmp, visited); + visited[i] = false; + } + } + } +}