Created
October 3, 2022 05:19
-
-
Save ManduTheCat/f971804de3847ed40fd170fce65a9abd to your computer and use it in GitHub Desktop.
램프
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package algorithmStudy.week8.lamp; | |
import java.io.BufferedReader; | |
import java.io.FileInputStream; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.util.Arrays; | |
import java.util.HashMap; | |
import java.util.Map; | |
import java.util.StringTokenizer; | |
public class Main { | |
static int N; | |
static int M; | |
static int K; | |
static String[] input; | |
static Map<String, Integer> patternSet = new HashMap<>(); | |
public static void main(String[] args) throws IOException { | |
// M 20 > k 1 일때 0의 갯수와 K 의 갯수가 같은 패턴을 찾는다. | |
// k 가 홀수 인경우 | |
// k 가 짝수 인경우 | |
// M 20 < K 999 일땐 같은 패턴중 0 이 가장 많은 수를 가진 것을 찾는다. = 가능한경우중 가장 횟수가 많은거? 같은 패턴이 하나 이상인것중 | |
// M = 1 이면 1 의 갯수를 찾는다 K = 짝수 | |
// M = 1 이면 0 의 갯수를 찾는다 K = 홀수 | |
// N = 1 이면 k 갯수만큼 0을 바꿀수 있다 K + (1의갯수)가 <N 이면 0리턴 == N 이면 1 리턴 | |
//1 6 111100 2 | |
System.setIn(new FileInputStream("resources/study/week8/1034lamp/input8.txt")); | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
StringTokenizer st = new StringTokenizer(br.readLine()); | |
N = Integer.parseInt(st.nextToken()); | |
M = Integer.parseInt(st.nextToken()); | |
input = new String[N]; | |
for (int n = 0; n < N; n++) { | |
input[n] = br.readLine(); | |
} | |
K = Integer.parseInt(br.readLine()); | |
for (String row : input) { | |
if (!patternSet.containsKey(row)) { | |
patternSet.put(row, 1); | |
} else { | |
patternSet.put(row, patternSet.get(row) + 1); | |
} | |
} | |
if (M == 1) { | |
// 무조건 K 번 다돌리니까 짝수 홀수로 갈린다 | |
int count = 0; | |
if (K % 2 == 0) { | |
//짝수면 두번 누르니 안바뀐다 | |
// 1의 갯수 출력 | |
for (String row : input) { | |
for (int idx = 0; idx < M; idx++) { | |
if (row.charAt(idx) == '1') { | |
count++; | |
} | |
} | |
} | |
} else { | |
// 홀수면 바뀐다. | |
// 0의 갯수출력 | |
for (String row : input) { | |
for (int idx = 0; idx < M; idx++) { | |
if (row.charAt(idx) == '0') { | |
count++; | |
} | |
} | |
} | |
} | |
System.out.println(count); | |
} else if (M >= K) { | |
int maxPatternCount = 0; | |
for (String key : patternSet.keySet()) { | |
int count = 0; | |
for (int idx = 0; idx < M; idx++) { | |
//0의 갯수를 세고 | |
if (key.charAt(idx) == '0') { | |
count++; | |
} | |
} | |
if (count == K) { | |
//0의 갯수와 k가 같으면 최대 값이 나오기에 패턴 갯수를 출력한다. | |
maxPatternCount = Math.max(maxPatternCount, patternSet.get(key)); | |
} | |
} | |
System.out.println(maxPatternCount); | |
} else { | |
String maxKey = ""; | |
int maxPatternCount = 1; | |
for (String key : patternSet.keySet()) { | |
if (maxPatternCount < patternSet.get(key)) { | |
maxPatternCount = patternSet.get(key); | |
maxKey = key; | |
} | |
} | |
System.out.println(patternSet.get(maxKey) == null ? 0 : patternSet.get(maxKey)); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment