[Bronze1] 1236 성지키기 문제

[알고리즘 공부] · 2025. 2. 22. 18:37
import sys
n, m = map(int, sys.stdin.readline().rstrip().split())

count = 0
row_check = [False] * n
colum_check = [False] * m
for i in range(n):
    s = input()
    if 'X' in s:
        row_check[i] = True
        for j in range(m):
            if s[j] == 'X':
                colum_check[j] = True

for i in range(n):
    if not row_check[i]:
        count += 1

for j in range(m):
    if not colum_check[j]:
        count += 1

redun_count = 0
#중복 찾기
for i in range(n):
    for j in range(m):
        if row_check[i] == False and colum_check[j] == False:
            redun_count += 1
            colum_check[j] = True
            break

print(count-redun_count)

 

행,열에 경비원이 있는지 bool 리스트로 만들고 각각 카운트한다.

 

각각의 false를 세어주고

 

중복을 찾는데, 행마다 둘다 false인 경우를 세고 column을 true로 바꿔주며, 바로 다음 행으로 넘어간다