[SWEA] 1959 두 개의 숫자열

유얌얌·2024년 3월 2일

알고리즘

목록 보기
3/25

두 개의 숫자열

# 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이 더 클때는 두 변수를 서로 바꾸는 법을 알았다!

profile
조금씩이라도 꾸준하게

0개의 댓글