Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1b62c1d

Browse files
committed
배수빈: [PG] 131703 2차원 동전 뒤집기_250102
1 parent d2f98fd commit 1b62c1d

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

‎Programmers/Level3/SB_131703.java‎

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
public class SB_131703 {
2+
static int N, M;
3+
static int[][] tg;
4+
5+
private static boolean isSame(int[][] board){
6+
for (int i = 0; i < N; i++) {
7+
for (int j = 0; j < M; j++) {
8+
if (board[i][j] != tg[i][j]) return false;
9+
}
10+
}
11+
return true;
12+
}
13+
14+
private static void flipRow(int[][] board, int r) { // 행 뒤집기
15+
for (int c = 0; c < M; c++) {
16+
board[r][c] ^= 1;
17+
}
18+
}
19+
private static void flipCol(int[][] board, int c) { // 열 뒤집기
20+
for (int r = 0; r < N; r++) {
21+
board[r][c] ^= 1;
22+
}
23+
}
24+
25+
private static int[][] copy(int[][] origin) {
26+
int[][] board = new int[N][M];
27+
for (int i = 0; i < N; i++) {
28+
for (int j = 0; j < M; j++) {
29+
board[i][j] = origin[i][j];
30+
}
31+
}
32+
return board;
33+
}
34+
public static int solution(int[][] beginning, int[][] target) {
35+
N = target.length;
36+
M = target[0].length;
37+
tg = copy(target);
38+
39+
int mn = Integer.MAX_VALUE;
40+
41+
for (int rowMask = 0; rowMask < (1 << N); rowMask++) { // 모든 행의 뒤집기 조합
42+
for (int colMask = 0; colMask < (1 << M); colMask++) { // 모든 열의 뒤집기 조합
43+
int[][] tmp = copy(beginning);
44+
int flip = 0;
45+
46+
// 뒤집기에 해당하는 행 찾기
47+
for (int r = 0; r < N; r++) {
48+
if ((rowMask & (1<<r)) !=0){
49+
flipRow(tmp, r);
50+
flip++;
51+
}
52+
}
53+
54+
// 뒤집기에 해당하는 열 찾기
55+
for (int c = 0; c < M; c++) {
56+
if ((colMask & (1 << c)) != 0) {
57+
flipCol(tmp, c);
58+
flip++;
59+
}
60+
}
61+
62+
// 목표한 상태랑 일치하는지 체크
63+
if (isSame(tmp)) mn = Math.min(mn, flip);
64+
}
65+
}
66+
return (mn==Integer.MAX_VALUE) ? -1 : mn;
67+
}
68+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /