알고리즘/SWEA

[Python] SWEA D2 1959번 - 두 개의 숫자열

번잔중 2022. 6. 2. 17:41
 

SW Expert Academy

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

swexpertacademy.com

이 문제는 길이가 짧은 숫자열과 긴 숫자열을 짧은 숫자열의 길이만큼 곱한 후 더해주는 문제입니다.

- 저는 m을 긴 숫자열(b), n을 짧은 숫자열(a)로 설정했습니다.

- 그 후에는 b가 a의 시작부터 끝까지 마주보는 경우를 구하기 위해 최대 횟수인 m - n + 1만큼 for문이 반복되도록 했습니다. 만약 n = 3 , m = 5라면 3회 반복하는 것입니다. 

- 이후 마주보는 값을 곱하여 더한 값을 구한 뒤, 최대값을 찾습니다.

T = int(input())
for t in range(1, T + 1):
    n, m = map(int, input().split())
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))

    if n > m:
        n, m = m, n
        a, b = b, a
    ans = 0
    
    for i in range(m - n + 1): # 긴 리스트가 작은 리스트 길이만큼 돌 수 있도록 m - n + 1
        tmp = 0
        for j in range(n):
            tmp += a[j] * b[j + i]
        ans = max(ans, tmp)

    print('#%d %d' % (t, ans))

피드백은 언제나 환영합니다.