(C++) 백준 1236 - 성 지키기

코딩너구리·2025년 9월 27일

코딩 문제 풀이

목록 보기
1/266

https://www.acmicpc.net/problem/1236

문제

성의 크기 N열 M행을 50이하 자연수로 입력받는다.
"."은 경비원이 미배치, "X"는 배치된 상태를 나타낸다.
모든 행과 열에 한명 이상 경비원 배치를 위한 최소값을 구한다.

접근

경비병이 모든 행과 열을 지킬 수 있어야 하기 때문에
미배치된 행의 수와 열의 수를 구해 더 큰수 만큼 배치해야 공백이없다.

문제 해결

경비병의 배치상태를 이중배열로 좌표화한다.
배열을 돌며 배치된 위치는 1로 표시한다.
각 행과 열을 돌며 표시가 안된 위치의 수 누적시킨다.
더 큰 수를 가려 출력한다.

코드

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int n, m;
	cin >> n >> m;
	vector<int> x(n);
	vector<int> y(m);
	vector<string> str(n);
	int xcnt = 0, ycnt = 0;

	for (int i = 0; i < n; i++)
	{
		cin >> str[i];
	}

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (str[i][j] == 'X')
			{
				x[i] = 1;
				y[j] = 1;
			}
		}
	}

	for (int i = 0; i < n; i++)
	{
		if (x[i] == 0)
			xcnt++;
	}
	for (int j = 0; j < m; j++)
	{
		if (y[j] == 0)
			ycnt++;
	}
	cout << max(xcnt, ycnt) << endl;
}

후기

경비병 배치 검증 부분에 'X'를 소문자로 해서 여러번틀렸다.
풀이에 문제가 없다고 생각하면 오타나 사소한 부분을 돌아보자..

0개의 댓글