SSAFY/SWEA

[SWEA] #2001. 파리퇴치_파이썬

728x90
반응형

풀기 전 생각해보기😮

  • 이차원 배열에서 파리채를 휘둘렀을 때 잡을 수 있는 파리 수 탐색
  • 가능한 모든 경우의 수 탐색

 


풀이🛫

T = int(input())

for a in range(T):
    N, M = map(int, input().split())
    arr = [list(map(int, input().split())) for i in range(N)]

    kills = []
    # 파리채를 내려칠 곳 탐색
    for i in range(N-M+1):
        for j in range(N-M+1):
            fly = 0
            # 해당 위치를 타격했을 때 잡을 수 있는 파리의 수 탐색 
            for k in range(M):
                for l in range(M):
                    fly += arr[i+k][j+l]
            kills.append(fly)

	# 배열 범위 안에서 가능한 경우의 수 중에서 가장 많은 파리를 잡을 때의 수 출력
    print("#"+str(a+1), max(kills))

 

핵심 정리🎁

# NxM의 배열 탐색
for i in range(N):
	for j in range(M):
    	arr[i][j]
  • range(N-M+1) : 파리채를 휘두를 수 있는 공간
    ex) M의 크기가 1일 경우, 모든 배열 공간을 대상으로 탐색할(파리채를 휘두를) 수 있다. 그런데 파리채의 크기가 커지게 되면, 탐색할 수 있는 배열 공간은 줄어들게 된다. 이에 따라 탐색 범위를 조절해줘야 하기 때문에 N-M+1으로 조정하였다.
    • N이 5일 때, 파리채(M)이 1일 때 휘두를 수 있는 경우의 수 = 25가지
    • 동일한 조건에서 M = 2일 때 휘두를 수 있는 경우의 수 = 16가지
    • 동일한 조건에서 M = 3일 때 휘두를 수 있는 경우의 수 = 9가지 ... 

 

링크💎

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

후기 😎

  • 풀고나면 재밌는 문제였는데, 풀기전에는 겁을 잔뜩 먹고 도전했다.
  • 이차원 배열 문제에서 두려움을 극복했으면 좋겠다.
  • 그동안 테스트 케이스를 JupyterNotebook에서 열심히 입력해댔건만.. VSC에서 한방에 가능하단 것을 이제서야 알고서 충격..