# 문제

가로 세로 크기와 경비원이 배치된 상태가 주어질때

몇명의 사람이 더 주어져야 모든 열과 모든 행에 경비원이 있게 되는가?


행 기준으로 볼 때, 열 기준으로 볼 때 따지면서 쭉 순회하여

행, 열 기준으로 필요한 경비원의 max값이 정답이 된다


#code

N,M = map(int,input().split())
l=[]
for tmp in range(N):
    add = list(input())
    l += [add]

change = False
if N>M:
    N,M = M,N
    change = True

l2 = [1 for k in range(N)]
for i in range(N):
    for j in range(M):
        if change == True:
            if l[j][i] == 'X' : l2[i] = 0
        else:
            if l[i][j] == 'X': l2[i] = 0

l3 = [1 for k in range(M)]
for i in range(N):
    for j in range(M):
        if change == True:
            if l[j][i] == 'X' : l2[j] = 0
        else:
            if l[i][j] == 'X': l2[j] = 0
print(max(sum(l2),sum(l3)))

행 우선으로 순회하고 열 우선으로 다시 순회하여 체크하다가 두번째 열 우선으로 순회할때  인덱스 에러가 발생하기도 했었는데


N,M = map(int,input().split())
l=[]
for tmp in range(N):
    add = list(input())
    l += [add]

l2 = [1 for k in range(N)]
l3 = [1 for k in range(M)]
for i in range(N):
    for j in range(M):
            if l[i][j] == 'X': l2[i] = 0
            if l[i][j] == 'X': l3[j] = 0

print(max(sum(l2),sum(l3)))

다시 생각해보면 인덱스 두개를 사용하여 이중 for문으로 순회하고 있으므로 두번 순회하여 체크할 필요가 없다.

기본 배열을 [1,1...] 로 초기화하고, 경비원이 있다면 0으로 값을 바꿔준다. 그걸 더하면 필요한 경비원 숫자가 된다.


n,m=map(int,input().split())
a=[input() for _ in range(n)]
s,t=0,0
for i in range(n):
  if 'X' not in a[i]:
    s+=1
for j in range(m):
  if 'X' not in [a[i][j] for i in range(n)]:
    t+=1
print(max(s,t))

다른 사람의 풀이. 이 문제는 사람마다 풀이가 조금씩 다르다