Skip to content

Commit bdda969

Browse files
authored
Create BJ_1285_동전뒤집기.java
1 parent 280b409 commit bdda969

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

250407/BJ_1285_동전뒤집기.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
5+
/**
6+
* 백준 1285번 동전 뒤집기
7+
* 1. N개의 각 행을 뒤집을지 안 뒤집을지 결정
8+
* 2. 각 경우에 따라 각 열이 뒷면이 더 많을 경우 뒤집기
9+
*/
10+
11+
public class Main {
12+
public static void main(String[] args) throws IOException {
13+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
14+
int N = Integer.parseInt(br.readLine());
15+
int[][] coins = new int[N][N];
16+
17+
for (int i = 0; i < N; i++) {
18+
String[] str = br.readLine().split("");
19+
20+
for (int j = 0; j < N; j++) {
21+
if (str[j].equals("H")) coins[i][j] = 1;
22+
else coins[i][j] = 0;
23+
}
24+
}
25+
26+
int answer = Integer.MAX_VALUE;
27+
28+
// 1 << N = Math.pow(2, N) = 2의 N제곱
29+
for (int bit = 0; bit < (1 << N); bit++) {
30+
int sum = 0;
31+
32+
for (int col = 0; col < N; col++) {
33+
int back = 0; // T인 동전 개수
34+
35+
for (int row = 0; row < N; row++) {
36+
int cur = coins[row][col];
37+
38+
/*
39+
* bit = 011(=3)일 경우 (0번째, 1번째 행만 뒤집음)
40+
*
41+
* bit & (1 << 0) != 0이므로 0번째 행 뒤집음
42+
* bit & (1 << 1) != 0이므로 1번째 행 뒤집음
43+
* bit & (1 << 2) == 0이므로 2번째 행 뒤집지 않음
44+
*/
45+
46+
if ((bit & (1 << row)) != 0) cur ^= 1;
47+
48+
if (cur == 0) back++; // T인 동전 개수 세기
49+
50+
}
51+
52+
// 각 열에서 T의 개수와 H의 개수 중 적은 쪽을 뒤집음
53+
sum += Math.min(back, N - back);
54+
}
55+
answer = Math.min(answer, sum);
56+
57+
}
58+
59+
System.out.println(answer);
60+
}
61+
}

0 commit comments

Comments
 (0)