# 1959 두개의 문자열
T = int(input())
for tc in range(1, T+1):
N, M = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
com_list = []
big = 0
# N < M
if N < M:
for bi in range(M-N+1):
com = 0
for ai in range(N):
com += A[ai] * B[bi+ai]
com_list.append(com)
for i in com_list:
if i > big:
big = i
print(f'#{tc} {big}')
# N > M
else:
for ai in range(N-M+1):
com = 0
for bi in range(M):
com += A[ai+bi] * B[bi]
com_list.append(com)
for i in com_list:
if i > big:
big = i
print(f'#{tc} {big}')
하나하나 다 곱해보기 방식을 채택하였다.
생각보다 시간이 오래걸리지는 않음
N,M 길이가 짧아서 그런가
시간을 단축하기 위해서는 max를 사용하면 좋을 것 같다.
시간이 더 짧은 분의 풀이를 참고하였다.
T = int(input())
for tc in range(1, T+1):
N, M = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
sum_com = []
# if N > M으로 나누기 대신
if N > M:
N, M = M, N
A, B = B, A
while len(B) >= N:
sum = 0
for i in range(N):
sum += A[i] * B[i]
sum_com.append(sum)
# B의 앞 원소를 하나씩 제거
B.remove(B[0])
print(f'#{tc} {max(sum_com)}')
근데 왜 시간이 더 나오지....
아무튼 분기처리를 하는 것 대신 N이 더 클때는 두 변수를 서로 바꾸는 법을 알았다!