IF - 연속 부분수열 1

Goody·2021년 4월 12일
0

알고리즘

목록 보기
85/122
post-custom-banner

문제

N개의 수로 이루어진 수열이 주어집니다.
이 수열에서 연속부분수열의 합이 특정숫자 M이 되는 경우가 몇 번 있는지 구하는 프로그램을
작성하세요.
만약 N=8, M=6이고 수열이 다음과 같다면
1 2 1 3 1 1 1 2
합이 6이 되는 연속부분수열은 {2, 1, 3}, {1, 3, 1, 1}, {3, 1, 1, 1}로 총 3가지입니다.


예시

MarrayOutput
6[1,2,1,3,1,1,1,2]3

풀이 및 회고

  • 주어진 배열을 이중으로 순회하면서, 첫 루프에서는 수열의 시작점을 지정한다.
  • 수열의 시작점에서부터 원소들을 더해나갔을 때, 합이 m보다 작으면 계속 더해나간다.
  • 합이 m보다 커지면 합을 초기화하고 두 번째 루프를 빠져나간다.
  • 합이 정확히 m과 같으면 count를 1 늘린다.

코드

const solution =(m, sequence) => {

    let count = 0;
    
    for(let i = 0; i < sequence.length; i++) {
        let temp = sequence[i];
        for(let j = i+1; j < sequence.length; j++) {
            if(temp + sequence[j] < m) {
                temp += sequence[j];
            }
            else if (temp + sequence[j] > m) {
                temp = 0;
                break;
            }
            else {
                temp = 0;
                count++;
                break;
            }
        }
    }

    return count;
}
post-custom-banner

0개의 댓글