끄적끄적 코딩
article thumbnail
Published 2023. 8. 6. 17:06
[Java] 백준 1034번 램프 알고리즘

브루트포스 문제입니다.

행과 열이 주어지고 켜진 전등(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

검색 태그