알고리즘 문제 풀이

백준 2799 블라인드 (JAVA 자바)

superbono 2021. 4. 21. 09:25

문제 출처: www.acmicpc.net/problem/2799

 

import java.util.Arrays;
import java.util.Scanner;

public class bj2799_블라인드 {
	static int N, M;
	static int res[];
	static int count[];
	static int idx;
	static String str;
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		M = sc.nextInt();
		N = sc.nextInt();
		res = new int [5];
		count = new int [N];
		for (int k = 0; k < M; k++) {
			sc.next();
			for (int i = 0; i < 4; i++) {
				str = sc.next();
				for (int j = 1; j < 5 * N  + 1; j += 5) {
					if(str.charAt(j) == '*') {
						count[idx]++;
						idx++;
					}
				}
				idx = 0;
			}
			for (int i = 0; i < N; i++) {
				res[count[i]]++;
			}
			Arrays.fill(count, 0);
		}
		sc.next();
		for (int i = 0; i < 5; i++) {
			System.out.print(res[i] + " ") ;
		}
	}
}

 

각 블라인드가 4x4니까 4줄짜리를 받으면서 *가 있는 칸은 count 배열의 수를 올려준다. 그렇게 4줄을 다 받고나면 count배열은 *가 4번이라면 4, 한번도 없었다면 0 이렇게 들어가 있을 것이다. 그럼 그 해당 숫자를 res배열의 인덱스로 활용하여 res 배열의 값을 1 증가시켜준다. 블라인드가 아닌 #이 있기 때문에 중간중간 그냥 sc.next()로 먹고 버려야한다.

구현 문제라서 푸는 방법은 다양하게 있을 것이다.