For Programmer
SWEA 1959 파이썬 문제풀이(두 개의 숫자열) 본문
728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq
이 문제도 간단한 구현문제이다. 단, 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
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
SWEA 1210 파이썬 문제풀이(Laddar1) (0) | 2022.02.06 |
---|---|
SWEA 1209 파이썬 문제풀이(Sum) (0) | 2022.02.06 |
SWEA 1970 파이썬 문제풀이(쉬운 거스름돈) (0) | 2022.02.06 |
SWEA 5431 파이썬 문제풀이(민석이의 과제 체크하기) (0) | 2022.02.06 |
SWEA 1208 파이썬 문제풀이(Flatten) (0) | 2022.02.05 |
Comments