-
section3.5 수들의 합알고리즘 2022. 10. 26. 23:51
N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i]+A[i+1]+…+A[j-1]+A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.
import sys sys.stdin = open("input.txt", "rt") n, m = map(int, input().split()) list = list(map(int, input().split())) # print(n, m, list) # 8 3 [1, 2, 1, 3, 1, 1, 1, 2] # 1개씩 합 구하고 2개씩 합 구하고 m개씩 합 구하기 > 코드는? > 2중 for문 사용 #for i in range(1, m+1): # for j in range(n-j): # 8개 2개일때 7번 # 8개 3개일때 6번 # 8개 4개일떄 5번 #if # 2개의 합 > 3개의 합 >> 이렇게 이어질때 합을 못 구하겠음 # 리스트의 인덱싱 합이 있으면 가능할 것 같은데
2개, 3개 이런식의 묶음 개념으로 생각해서 못 풀었다
도저히 for문으로 해결이 안 돼서 포기
import sys sys.stdin = open("input.txt", "rt") n, m = map(int, input().split()) a = list(map(int, input().split())) lt = 0 rt = 1 tot = a[0] cnt = 0 while True: if tot<m: if rt>n: tot += a[rt] rt += 1 else: break elif tot == m: cnt += 1 tot -= a[lt] lt += 1 else: tot -= a[lt] lt += 1 print(cnt)
이런 식으로 인덱스를 두 개 이용해서 푸는 문제였다
어렵지 않으니 주말에 한 번 더 풀어봐야겠다
728x90'알고리즘' 카테고리의 다른 글
section3.7 사과나무(다이아몬드) (0) 2022.10.27 section3.6 수들의 합 (0) 2022.10.27 section3.4 두 리스트 합치기 (0) 2022.10.26 section3.3 카드 역배치 (0) 2022.10.26 section3.2 숫자만 추출 (0) 2022.10.25