For Programmer

SWEA 1959 파이썬 문제풀이(두 개의 숫자열) 본문

코팅테스트/백준 문제 모음

SWEA 1959 파이썬 문제풀이(두 개의 숫자열)

유지광이 2022. 2. 6. 02:02
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq 

 

SW Expert Academy

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

swexpertacademy.com

 


이 문제도 간단한 구현문제이다. 단, Ai 와 Bj 중 어느 리스트의 길이가 더 긴지 모르므로 우선 Ai의 길이가 Bj 길이보다 적다고 가정을 하고 코드를 구현하고 if문으로 Ai가 길경우 Bj리스트를 Ai로 Ai리스트를 Bj로 변경해주는 코드를 삽입해준다.

 

def solution(Ai, Bj):
    result = []  # 곱의 합들을 저장할 리스트

    if len(Ai) > len(Bj):  # 만약 Ai의 길이가 Bj보다 더 길다면
        Ai, Bj = Bj, Ai  # 둘 리스트를 바꿔준다.

    start_j = 0  # 긴 길이를 가진 리스트 인덱스를 계산할 변수 선언 및 초기화
    while True:
        i = 0  # 짧은 길이를 가진 리스트 인덱스를 계산할 변수 선언 및 0 초기화
        j = start_j  # 긴 길이를 가진 리스트 인덱스를 start_j로 바꿔준다.
        temp = []  # 곱들을 저장할 임시 리스트
        while True:
            temp.append(Ai[i] * Bj[j])  # 같은 인덱스를 곱해준다.

            i += 1  # 길이가 더 짧은 리스트의 인덱스를 +1 씩해준다.
            j += 1  # 길이가 더 긴 리스트의 인덱스를 +1 씩해준다.

            if i == len(Ai):  # 만약 길이가 더 짧은 리스트의 인덱스가 끝에 도달했다면
                result.append(sum(temp))  # 곱들의 합을 추가해준다.
                start_j += 1  # 길이가 긴 인덱스는 그다음인덱스부터 비교해야 하므로 +1해주고
                break  # 반복문 탈출

        if len(result) == (len(Bj) - len(Ai) + 1):  # 만약 저장된 곱들의 합이 두리스트 길이의 차 + 1만큼 추가가 되었다면
            print(f'#{order} {max(result)}')  # 출력
            return


T = int(input())

for order in range(1, T + 1):
    N, M = map(int, (input().split()))
    Ai = list(map(int, input().split()))
    Bj = list(map(int, input().split()))

    solution(Ai, Bj) #함수 실행

 

다음은 for문을 이용한 더 깔끔한 코드이다. 

T = int(input())

for order in range(T):
    N, M = map(int, input().split())
    Ai = list(map(int, input().split()))
    Bj = list(map(int, input().split()))

    if N > M:
        Ai, Bj = Bj, Ai
        N, M = M, N

    result = []
    for i in range(M - N + 1):
        temp = []
        for j in range(N):
            temp.append(Ai[j] * Bj[i + j])
        result.append(sum(temp))

    print(f'#{order + 1} {max(result)}')

 

728x90
Comments