[SWEA] 2001. 파리퇴치
728x90

문제

  • 1차 접근 방법
  • 정답 여부

1차 접근 방법

N * N 의 사이즈에서 각 칸 마다 파리의 숫자가 있는데 M * M 사이즈의 파리채를 통해 가장 많은 수의 파리를 잡아야 하는 것이 목적이다.
이를 위해 N * N 배열을 순회하면서 M * M 사이즈만큼 확인해서 각 sum 을 구하고 그 가운데 최댓값을 구하는 방법을 고안하였다.

그러기 위해서는 N - M + 1 범위까지만 순회하여도 M 사이즈 만큼은 다시 순회를 할 것이기 때문에 세로, 가로는 처음에 N - M +1 만큼 순회를 2중으로 순회를 하고,그 안에서 다시 M 만큼 가로, 세로 순회를 해야한다.

그리고 M만큼 순회를 하기 전에 현재 파리채의 sum을 0으로 초기화하고 계산한 다음 max_sum과 비교하면서 최댓값을 정해야한다.

아래가 구현 코드이다!!
for문이 4번 중첩되다니...ㅜ

T = int(input())

for test_case in range(1, T + 1):
    N, M = map(int, input().split())
    N_list = [list(map(int, input().split())) for _ in range(N)]

    max_sum = 0

    for i in range(N - M + 1):
        for j in range(N - M + 1):
            current_sum = 0
            for x in range(M):
                for y in range(M):
                    current_sum += N_list[i + x][j + y]
            if current_sum > max_sum:
                max_sum = current_sum

    print(f'#{test_case} {max_sum}')

정답 여부

  • 정답!
728x90
반응형