HS_development_log

백준 1034번 - 램프 / Java 본문

Algorithm-백준/탐색

백준 1034번 - 램프 / Java

DevHyeonseong 2020. 7. 25. 01:00
반응형

1. 문제

 

1034번: 램프

첫째 줄에 N과 M이 주어진다. N은 행의 개수이고, M은 열의 개수이다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 램프의 상태가 주어진다. 1이 켜져있는 상태이고, 0이 꺼져�

www.acmicpc.net

2. 알고리즘

  1. 스위치 조작은 하나의 열을 통째로 바꿔버리므로 초기 상태가 다른 행은 조작 횟수와 상관없이 같아질 수 없다.

  2. 따라서 스위치 조작을 k번했을때 모두 1로바꿀수 있는 행 + 같은 행의 개수가 가장 많은 행의 개수

  3. k번 조작했을때 모두 1로 바꿀 수 있는 행은 (0의개수%2==k%2) &&  0의개수<=k 이다.

3. 코드

/**
 * 2020.07.24
 * 백준 1034 : 램프
 * DevHyeonseong
 */
import java.util.Scanner;
public class BOJ1034 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int n = scan.nextInt();
        int m = scan.nextInt();
        scan.nextLine();

        int[][] table = new int[n][m];
        String[] temp = new String[n];

        for(int i=0;i<n;i++){
            temp[i] = scan.nextLine();
            for(int j=0;j<m;j++){
                table[i][j] = Integer.parseInt(temp[i].charAt(j)+"");
            }
        }

        int k = scan.nextInt();
        boolean[] check = new boolean[n];
        int max = 0;

        for(int i=0;i<n;i++){
            int cnt = 0;
            for(int j=0;j<m;j++){
                if(table[i][j]==0){
                    cnt++;
                }
            }
            if((cnt%2==k%2)&&cnt<=k){ // k번 조작해서 조건에 맞는 행이 나오는지
                check[i]=true;
            }
        }

        for(int i=0;i<n;i++){
            if(check[i]){ // 조건에 맞는 행만
                int cnt = 0;
                for(int j=0;j<n;j++){
                    if(temp[i].equals(temp[j])){ // 초기상태가 같은 행의 개수를 센다
                        cnt++;
                    }
                }
                if(max < cnt){
                    max = cnt;
                }
            }
        }
        System.out.println(max);
    }
}

 

 

 

끝.

반응형