BOJ 1236 (성 지키기)

JH·2023년 2월 13일
0

BOJ 알고리즘 (C++)

목록 보기
28/97
  • 문제
    영식이는 직사각형 모양의 성을 가지고 있다. 성의 1층은 몇 명의 경비원에 의해서 보호되고 있다. 영식이는 모든 행과 모든 열에 한 명 이상의 경비원이 있으면 좋겠다고 생각했다.

    성의 크기와 경비원이 어디있는지 주어졌을 때, 몇 명의 경비원을 최소로 추가해야 영식이를 만족시키는지 구하는 프로그램을 작성하시오.

  • 입력
    첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다.

  • 출력
    첫째 줄에 추가해야 하는 경비원의 최솟값을 출력한다.

#include<iostream>
#include<algorithm>
using namespace std;
int N, M;
char c[51][51];
int x[50], y[50];
int row_count, col_count;
void fast_io()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
}

int main()
{
	fast_io();
	cin >> N >> M;
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < M; j++)
		{
			cin >> c[i][j];
			if (c[i][j] == 'X')
			{
				x[j]++;
				y[i]++;
			}
		}
	}
	for (int i = 0; i < N; i++)
	{
		if (y[i] == 0)
		{
			row_count++;
		}
	}
	for (int i = 0; i < M; i++)
	{
		if (x[i] == 0)
		{
			col_count++;
		}
	}
	cout << max(row_count, col_count);
}

  모든 행과 열에서 경비원이 필요한 문제이다 각 행, 열에 X가 들어있는 것을 표현하기 위해 int형 배열 2개를 더 선언해준 후 X가 들어있지 않는 index들을 파악 후 필요한 경비원의 수를 계산하고 비교를 해줘야 한다. 행, 열 중 큰 쪽에 맞춰야 한다

profile
블로그 -> 노션

0개의 댓글