https://www.acmicpc.net/problem/1236
1236번: 성 지키기
첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다
www.acmicpc.net
풀이
처음에는 어떻게 풀지 고민해보았는데, 문제에서 요구하는 바는 행과 열마다 경비원이 하나씩 존재해야한다는 것이다.
어느 n행과 m열이 주어졌을 때 두 직선의 교점에 경비원이 위치한다면 한 경비원으로도 문제에서 원하는 바를 만족시킬 수 있다는 것이다. 그말은 즉슨 가장 긴 직선의 길이만큼 경비원을 배치해준다면 다른 직선의 경비원 문제는 자연스럽게 해결된다는 것이다.
코드
# 1236번 성 지키기
def check(li, length):
cnt = 0
for i in range(length):
if li[i] == False:
cnt += 1
return cnt
n, m = map(int, input().split())
horizon = [False] * n
vertical = [False] * m
grid = [list(input()) for _ in range(n)]
ans = 0
for i in range(n):
for j in range(m):
if grid[i][j] == "X":
horizon[i] = True
vertical[j] = True
ans = max(check(horizon, n), check(vertical, m))
print(ans)
출력결과
'백준 > 구현' 카테고리의 다른 글
[백준][Python] 1002번 터렛 - 코팩 (0) | 2023.08.07 |
---|---|
[백준][Python] 18110번 solved.ac - 코팩 (0) | 2023.08.01 |
[백준][Python] 11478번 서로 다른 문자열의 개수 - 코팩 (1) | 2023.05.08 |
[백준][Python] 7785번 회사에 있는 사람 - 코팩 (0) | 2023.05.08 |
[백준][Python] 1010번 다리 놓기 - 코팩 (0) | 2023.04.05 |