https://www.acmicpc.net/problem/1236
1236번: 성 지키기
첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다
www.acmicpc.net
문제
영식이는 직사각형 모양의 성을 가지고 있다. 성의 1층은 몇 명의 경비원에 의해서 보호되고 있다. 영식이는 모든 행과 모든 열에 한 명 이상의 경비원이 있으면 좋겠다고 생각했다.
성의 크기와 경비원이 어디있는지 주어졌을 때, 몇 명의 경비원을 최소로 추가해야 영식이를 만족시키는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다.
출력
첫째 줄에 추가해야 하는 경비원의 최솟값을 출력한다.
내 풀이
31120kb 44ms
# 총 가로줄의 값과 총 세로줄의 값을 비교하여 필요한 경비병 수를 파악
row_num, column_num = map(int, input().split())
total_cols = [] # 총 세로줄
total_row = [0] * column_num # 총 가로줄
for _ in range(row_num): # 총 가로줄 수만큼 1줄씩 입력 반복
input_row = list(input())
for i in range(len(input_row)): # 가로줄 1줄의 경비병 수 파악
if input_row[i] == 'X': # 컬럼이 X이면 1명으로 파악
input_row[i] = 1
total_row[i] += 1 # 최종 가로줄 지속 합산 : 각 컬럼에 총 몇명의 경비병이 있는지
else:
input_row[i] = 0
# 최종 세로줄 합산
total_cols.append(sum(input_row)) # 가로줄 다 입력 받고 그 줄에 총 몇명의 경비병이 있는지
row_no_guard = 0
col_no_guard = 0
# 최종 가로줄의 경비병 수, 세로줄의 경비병 수를 기준으로 더 필요한 최소 경비병 수 구하기
for j in total_row:
if j == 0:
row_no_guard += 1
for k in total_cols:
if k == 0:
col_no_guard += 1
print(max(row_no_guard,col_no_guard)) # 가로 1명 부족, 세로 3명 부족하면 최소 3명이 필요하므로 max사용
'파이썬 알고리즘 연습' 카테고리의 다른 글
[Python | 백준 1268번] 임시 반장 정하기 (1) | 2024.01.22 |
---|---|
[Python | 백준 1259번] 팰린드롬수 (0) | 2024.01.22 |
[Python | 백준 1157번] 단어 공부 (0) | 2024.01.22 |
[Python | 백준 1681번] 줄 세우기 (0) | 2024.01.19 |
[Python | 백준 1145번] 적어도 대부분의 배수 (1) | 2024.01.19 |