문제 바로가기
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)))
피드백
처음에는 문제를 긴 숫자열 중 짧은 숫자열의 길이만큼 무작위로 뽑아내는 문제로 보고 백트래킹으로 구현했는데 전혀 다른 답이 나와서 당황했다. 다시 문제를 읽어보니, 그냥 자리만 이동하는 문제였다. 학창시절에도 그렇고 지금도 그렇고 문제를 항상 꼼꼼히 읽어야겠다.
'SWEA (SW Expert Academy) > D2' 카테고리의 다른 글
[SWEA/D2] 2005 파스칼의 삼각형 (0) | 2023.05.16 |
---|---|
[SWEA/D2] 1954 달팽이 숫자 / BFS (0) | 2023.04.22 |
[SWEA/D2] 1974 스도쿠 검증 (0) | 2023.04.21 |
[SWEA/D2] 1979 어디에 단어가 들어갈 수 있을까 (0) | 2023.04.21 |
[SWEA/D2] 2001 파리 퇴치 (0) | 2023.04.21 |