[SWEA] - 1959. 두 개의 숫자열

jjiani·2021년 2월 14일
0

SWEA

목록 보기
9/20
post-thumbnail

swea - 문제링크

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))

🔑 나는 이 문제가 넘나 어려웠다,,,ㅠㅠ 어떻게 해야 할 지는 알겠는데 자꾸 헷갈려서 고생했다.(함수를 쓰지 않기위해 노력하여 코드가 길어짐)

  • 리스트가 두개가 주어지는데 짧은 리스트는 고정이고 긴 리스트의 인덱스를 변화시켜가며 곱해주기 위해서 우선 리스트의 순서를 정해주었다. 안해줘도 되는 작업이고 if문으로 두개의 크기를 비교해서 해도 되지만 내가 자꾸 변수가 헷갈려서 짧은 리스트가 첫번째 긴 리스트가 두번째로 바꿔주었다.
  • 📢 주석으로 중요라고 써있는게 정말 중요!!! 브레이크 포인트를 잘 설정해주는게 핵심이다!(늘 그랬지만?,,,) 짧은 리스트가 한칸씩 이동하면서 곱해줄때 (L-S)까지(긴리스트의 인덱스값)만 왔을 때 곱해줄 수 있고(왜냐? 짧은 리스트의 길이가 긴 리스트의 길이를 넘어갈 수 없기때문에!) (L-S+1)이 되는 순간 멈춰야 한다. 이걸 잡아내느라 한참걸렸다.

💡 정확한 이해를 위해 그려보았다.

잊지 말아야 다음에도 써먹는다! 파이팅!

profile
¡Bienvenido a mi velog!🐣

0개의 댓글