여니의 취준 준비/코딩테스트 (Python)

[n1236] 성 지키기 in python

여니's 2021. 10. 27. 17:41


처음에는 행은 행 따로 열은 열 따로

체크를 해줘야겠다라는 생각이 

떠올랐다.

 

행은 x가 아예 없는 행의 개수를 세어주고

마찬가지로

열도 x가 아예 없는 열의 개수를 세어준다

 

이렇게 구한 개수중에 큰 값을 출력해주면 된다.

 

모든 행과 열에 최소한 한 명 이상의 경비원이 배치되어야 한다.

지금 위에서 구한 건

행과 열마다 각각 배치되어야할 경비원의 수를 구한것이다.

 

만약 행에 있어야할 경비원의 수가 2이고

열에 있어야할 경비원의 수가 3이라고 하자.

 

문제에서는 모든 행과 열에 경비원이 있어야한다고 했으니까최소한 3명이 있어야 위 조건을 만족할 수 있다.

 

따라서 max함수를 이용해서 구해주는 것이다.

 

n, m = map(int, input().split())
array = [input() for _ in range(n)]
row = 0
col = 0

for i in range(n):
    if "X" not in array[i]:
        row += 1

for i in range(m):
    cnt = 0
    for k in range(n):
        if "X" not in array[k][i]:
            cnt += 1
    if cnt == n:
        col += 1
print(max(row, col))

 


열에 관련된 연산을 할 때

이중 for문을 이용하여 구했다.

 

그런데 if문 자체에서 for문을 먼저 돌리게 되면

시간단축을 할 수 있다!!

 

이 부분을 생각해내지 못했다.

 

기억해 둘 필요가 있을 것 같아서

이렇게 메모한다.

 

 

if  "X"  not in [array[k][i] for k in range(n)]:

for k .. 반복문을 먼저 실행해서

리스트 형식으로 값을 받아온 뒤

해당 리스트에 "X"값이 있는지 확인하는 조건문을 실행한다.

 

n, m = map(int, input().split())
array = [input() for _ in range(n)]
row = 0
col = 0

for i in range(n):
    if "X" not in array[i]:
        row += 1

for i in range(m):
    if "X" not in [array[k][i] for k in range(n)]:
        col+=1

print(max(row, col))