SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
📌 작성한 코드
T = int(input())
for test in range(1, T + 1):
n,m = map(int,input().split())
arr = [[int(x) for x in input().split()] for y in range(n)]
max_sum = 0;
for i in range(n-m+1):
for j in range(n-m+1):
temp_sum = 0
for k in range(m):
temp_sum += sum(arr[i + k][j:j + m])
if max_sum < temp_sum: max_sum = temp_sum
print(f'#{test} {max_sum}')
📌 풀이
1. 입력받기
- n,m, 배열을 입력받는다. (파이썬에서 배열 입력받는 법 정확하게 배우고 넘어가기)
n,m = map(int,input().split())
arr = [[int(x) for x in input().split()] for y in range(n)]
2. 반복문 돌기
max_sum = 0;
for i in range(n-m+1):
for j in range(n-m+1):
temp_sum = 0
for k in range(m):
temp_sum += sum(arr[i + k][j:j + m])
if max_sum < temp_sum: max_sum = temp_sum
배열을 돌면서 합을 구할 건데 한 행, 열 당 m개씩을 선택할거니까 0부터 n-m까지만 인덱스를 움직여도 전체 다 확인할 수 있다.
-> n-m의 위치에서 m개를 선택하면 n-m+m = n
i,j를 사용한 반복문을 통해 행렬을 순회하고, 합을 구하기 위해서 k를 사용한 반복문을 하나 더 만든다.
- 한번에 m개를 선택해서 더하는 것을 m번 반복해서 원하는 m*m배열의 전체 합을 구한다.
-> 현재 기준 인덱스가 arr[i][j]인데 여기서 m개니까 j부터 j+m개까지, 반복문도 k번 돌아서 i부터 i+k까지 더할 수 있도록 한다.
이렇게 더한 값을 모아서 현재까지의 최댓값과 비교해서 더 크면 최댓값을 수정한다
📌 배운 것
배열 입력받는 법
arr = [[int(x) for x in input().split()] for y in range(n)]
배열의 합 구하는 법
temp_sum = 0
for k in range(m):
temp_sum += sum(arr[i + k][j:j + m])

'알고리즘 > SWEA' 카테고리의 다른 글
| [Python] SWEA D2 : 1984 - 중간 평균값 구하기 (0) | 2023.10.29 |
|---|---|
| [Python] SWEA D2 : 1989 - 초심자의 회문 검사 (0) | 2023.10.29 |
| [Python] SWEA D2 : 2005 - 파스칼의 삼각형 (0) | 2023.10.28 |
| [Python] SWEA D2 : 2007 - 패턴 마디의 길이 (1) | 2023.10.28 |
| [Python] SWEA D2 : 1926 - 간단한 369게임 (0) | 2023.10.28 |