T = int(input())
for test_case in range(1, T + 1):
# 각 리스트의 길이
S, L = map(int, input().split())
S_list = list(map(int, input().split()))
L_list = list(map(int, input().split()))
# 짧은리스트와 긴 리스트 바꿔주기
if S > L:
S_list, L_list = L_list, S_list
S, L = L, S
# 짧은리스트의 인덱스는 고정
# 짧은리스트의 길이만큼만 돌되
# l = 긴리스트의 인덱스, s = 짧은리스트의 인덱스
# 각 인덱스값끼리 곱하고 더한 뒤에 담을 빈 리스트 만들기.
sum_list = []
# 최대값이 L이므로 L만큼 돌면서
for i in range(L):
# 긴 리스트의 인덱스를 한번 곱해주고 난 뒤에 다시 돌아올때 +1 하기
l = i
# 짧은 리스트의 인덱스는 항상 0부터 시작
s = 0
total = 0
# 중요!!!
if l == L - S + 1:
break
# 짧은 리스트의 인덱스값이 리스트의 길이보다 작을때까지 반복!
while s < S:
# 같은 인덱스값을 곱해준뒤 total에 저장하고 반복해서 더해줌
total += S_list[s] * L_list[l]
# 인덱스값 1씩 증가
s += 1
l += 1
# 대소를 비교할 수 있게 리스트에 total값 담기.
sum_list.append(total)
# 리스트 순회하면서 최대값 찾기.
max_num = sum_list[0]
for j in sum_list:
if j > max_num:
max_num = j
print('#{} {}'.format(test_case, max_num))
🔑 나는 이 문제가 넘나 어려웠다,,,ㅠㅠ 어떻게 해야 할 지는 알겠는데 자꾸 헷갈려서 고생했다.(함수를 쓰지 않기위해 노력하여 코드가 길어짐)
💡 정확한 이해를 위해 그려보았다.
잊지 말아야 다음에도 써먹는다! 파이팅!