728x90
브루트포스 문제입니다.
행과 열이 주어지고 켜진 전등(1)과 꺼진 전등(0)이 주어집니다.
열의 버튼을 누르면 해당 열에 있는 전등들은 모두 토글됩니다.(0 -> 1, 1-> 0)
행의 모든 전등이 켜져있는것을 켜져있는 행이라고 합니다.
스위치를 적절히 눌렀을 때의 켜진 행의 최댓값을 구해야합니다.
각 행에 0의 개수를 구합니다.
행의 0의 개수가 K보다 많다면 해당 행은 절대 켜질 수 없는 행입니다.
행의 0의 개수와 K의 홀수 짝수가 일치하지 않으면 켤 수 없는 행입니다.
이를 통해 가능한 경우와 불가능한 경우를 구할 수 있습니다.
가능한 행을 구하고, 같은 모양의 행이 있다면 카운트해줘서 가장 많은 카운트를 출력해주었습니다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int result = 0;
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int k;
int cnt = 0;
String[] arr = new String[n];
int[] zeroCnt = new int[n];
String prev = "";
for (int i = 0; i < n; ++i) {
arr[i] = br.readLine();
}
Arrays.sort(arr);
k = Integer.parseInt(br.readLine());
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (arr[i].charAt(j) == '0') {
++zeroCnt[i];
}
}
if (!arr[i].equals(prev)) {
cnt = 0;
}
prev = arr[i];
if (zeroCnt[i] <= k && zeroCnt[i] % 2 == k % 2) {
++cnt;
result = Math.max(result, cnt);
}
}
bw.write(result + "\n");
bw.close();
}
}
'알고리즘' 카테고리의 다른 글
[Java] 백준 1092번 배 (0) | 2023.08.08 |
---|---|
[Java] 백준 2343번 기타 레슨 (0) | 2023.08.08 |
[Java] 백준 3649번 로봇 프로젝트 (0) | 2023.08.06 |
[Java] 백준 19539번 사과나무 (0) | 2023.08.04 |
[Java] 백준 5557번 1학년 (0) | 2023.08.03 |