ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.