# 문제
가로 세로 크기와 경비원이 배치된 상태가 주어질때
몇명의 사람이 더 주어져야 모든 열과 모든 행에 경비원이 있게 되는가?
행 기준으로 볼 때, 열 기준으로 볼 때 따지면서 쭉 순회하여
행, 열 기준으로 필요한 경비원의 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))
다른 사람의 풀이. 이 문제는 사람마다 풀이가 조금씩 다르다
0 댓글