티끌모아 태산

1236: 성지키기 본문

백준 문제/문자열,누적합,구현

1236: 성지키기

goldpig 2024. 3. 27. 12:56
728x90

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

 

1236번: 성 지키기

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

www.acmicpc.net

핵심 아이디어

각 행과 열마다 X가 들어있지 않는 행, 열의 개수를 구하고 그중 큰 값을 출력해주면 된다.

위 예에서 X가 없는 행은 3개이고 X가 없는 열은 1개이다. 이 중 큰 값을 출력하면 3이 된다.

코드 구현

Python

'''
각 행과 열마다 X가 안들어 있는 행, 열의 개수를 구하고
그 중 큰 값을 출력하면 된다.
'''
n,m = map(int, input().split())
graph = [list(input()) for _ in range(n)]
# for i in graph:
# 	print(*i)
row = 0
column = 0
# 행 탐색
for i in range(n):
	if 'X' not in graph[i]:
		row += 1
# 열 탐색
for j in range(m):
	if 'X' not in [graph[i][j] for i in range(n)]:
		column += 1
print(max(row, column))

C++

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

int n, m;
char graph[50][50];


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

	// 맵의 크기 입력 받기
	cin >> n >> m;
	// 맵 정보 입력 받기
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> graph[i][j];
		}
	}

	int row = 0;
	int column = 0;
	// 행 탐색
	for (int i = 0; i < n; i++) {
		bool check = true;
		for (int j = 0; j < m; j++) {
			if (graph[i][j] == 'X') {
				// 행에 한개라도 있으면 break
				check = false;
				break;
			}
		}
		if (check) row += 1;
	}

	// 열 탐색
	for (int j = 0; j < m; j++) {
		bool check = true;
		for (int i = 0; i < n; i++) {
			// 열에 한개라도 경비가 있으면
			if (graph[i][j] == 'X') {
				check = false;
				break;
			}
		}
		if (check) column += 1;

	}
	
	// 둘 중에 더 큰 수 출력하기
	cout << max(row, column) << "\n";
	return 0;

}
728x90