SWEA (SW Expert Academy)/D2

[SWEA/D2] 1959 두 개의 숫자열

hellosonic 2023. 4. 22. 06:34

문제 바로가기

 

SW Expert Academy

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

swexpertacademy.com

나의 코드 및 설명

t = int(input())
for test_case in range(1, t+1):
    n, m = map(int,input().split())
    a_list = list(map(int, input().split()))
    b_list = list(map(int, input().split()))

    #긴 문자열, 짧은 문자열 정하기
    if len(a_list) < len(b_list):
        short_list = a_list
        long_list = b_list
    else:
        short_list = b_list
        long_list = a_list
    
    ans = []
    #긴 문자열의 길이 - 짧은 문자열의 길이 + 1 만큼 움직일 수 있다.
    for i in range(len(long_list)-len(short_list)+1):
        result = 0
        #움직인 각 자리를 곱해서 더해준다.
        for j in range(len(short_list)):
            result += short_list[j] * long_list[j+i]
        ans.append(result)

    print("#{} {}".format(test_case, max(ans)))

피드백

처음에는 문제를 긴 숫자열 중 짧은 숫자열의 길이만큼 무작위로 뽑아내는 문제로 보고 백트래킹으로 구현했는데 전혀 다른 답이 나와서 당황했다. 다시 문제를 읽어보니, 그냥 자리만 이동하는 문제였다. 학창시절에도 그렇고 지금도 그렇고 문제를 항상 꼼꼼히 읽어야겠다.