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