Skip to content

Commit cd320b9

Browse files
committed
김명진 1034 램프 풀이
1 parent 80bbb50 commit cd320b9

1 file changed

Lines changed: 85 additions & 0 deletions

File tree

src/week8/BJ1034Lamp/Main.java

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,89 @@
11
package week8.BJ1034Lamp;
22

3+
import java.io.BufferedReader;
4+
import java.io.FileInputStream;
5+
import java.io.IOException;
6+
import java.io.InputStreamReader;
7+
import java.util.HashMap;
8+
import java.util.Map;
9+
import java.util.StringTokenizer;
10+
311
public class Main {
12+
static int N;
13+
static int M;
14+
static int K;
15+
static String[] input;
16+
static Map<String, Integer> patternSet = new HashMap<>();
17+
18+
public static void main(String[] args) throws IOException {
19+
// k 가 홀수 인경우
20+
// k 가 짝수 인경우
21+
// M = 1 이면 1 의 갯수를 찾는다 K = 짝수
22+
// M = 1 이면 0 의 갯수를 찾는다 K = 홀수
23+
// N = 1 이면 k 갯수만큼 0을 바꿀수 있다 K + (1의갯수)가 <N 이면 0리턴 == N 이면 1 리턴
24+
// 이외에는 패턴별로 확인하면서
25+
// K 가 홀수면 가능 한 패턴의 0의 갯수도 훌수여야 한다. K 가 짝수면 가능 한 패턴의 0의 갯수도 홀수여야한다.
26+
System.setIn(new FileInputStream("resources/study/week8/1034lamp/input9.txt"));
27+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
28+
StringTokenizer st = new StringTokenizer(br.readLine());
29+
N = Integer.parseInt(st.nextToken());
30+
M = Integer.parseInt(st.nextToken());
31+
input = new String[N];
32+
for (int n = 0; n < N; n++) {
33+
input[n] = br.readLine();
34+
}
35+
K = Integer.parseInt(br.readLine());
36+
for (String row : input) {
37+
if (!patternSet.containsKey(row)) {
38+
patternSet.put(row, 1);
39+
} else {
40+
patternSet.put(row, patternSet.get(row) + 1);
41+
}
42+
}
43+
// M 이 1인경우
44+
if (M == 1) {
45+
int count = 0;
46+
// M 이 1이면서 짝수인경우
47+
if (K % 2 == 0) {
48+
//짝수면 두번 누르니 어짜피 안바뀐다
49+
// 1의 갯수 출력
50+
for (String row : input) {
51+
for (int idx = 0; idx < M; idx++) {
52+
if (row.charAt(idx) == '1') {
53+
count++;
54+
}
55+
}
56+
}
57+
// M 이 1이면서 홀수인경우
58+
} else {
59+
// 홀수면 어짜피 바뀐다.
60+
// 0의 갯수출력
61+
for (String row : input) {
62+
for (int idx = 0; idx < M; idx++) {
63+
if (row.charAt(idx) == '0') {
64+
count++;
65+
}
66+
}
67+
}
68+
}
69+
// 출력부분
70+
System.out.println(count);
71+
} else {
72+
int maxPatternCount = 0;
73+
for (String key : patternSet.keySet()) {
74+
int count = 0;
75+
for (int idx = 0; idx < M; idx++) {
76+
//0의 갯수를 세고
77+
if (key.charAt(idx) == '0') {
78+
count++;
79+
}
80+
}
81+
if (count <= K && K % 2 == count % 2) {
82+
// K 가 홀수면 가능 한 패턴의 0의 갯수도 훌수여야 한다. K 가 짝수면 가능 한 패턴의 0의 갯수도 홀수여야한다.
83+
maxPatternCount = Math.max(maxPatternCount, patternSet.get(key));
84+
}
85+
}
86+
System.out.println(maxPatternCount);
87+
}
88+
}
489
}

0 commit comments

Comments
 (0)