ffinn92 / Keep-at-solve-it

꾸준히 알고리즘 풀기 위한 스터디 저장소입니다.
2 stars 3 forks source link

[220707][Tany][인프런](3-4) 연속부분수열 #82

Closed juni8453 closed 2 years ago

juni8453 commented 2 years ago

📌 문제

⭐️ 아이디어

🤔 고민한 내용

💪 새롭게 배운 내용

🆘 이해가 어려운 내용

❌ 해결하지 못한 이유

✅ 본인 풀이

🏋️‍♀️ 시도횟수 : n회 | ⏱ 걸린시간 : 100ms | 💾 메모리 : 100MB

package study.section3;

import java.util.Scanner;

public class Section0304Answer {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] arr = new int[n];

        for (int i = 0; i < arr.length; i++) {
            arr[i] = sc.nextInt();
        }

        int answer = solution(arr, m);
        System.out.println(answer);
    }

    private static int solution(int[] arr, int m) {
        int sum = 0;
        int count = 0;
        int left = 0;
        int right = 0;
        // TODO left, right Pointer 필요
        //  위 문제와 다르게 한 줄 배열에서는 투포인터, 슬라이딩을 섞어써야하는 듯

        // 탈출 조건식은 배열 크기까지만 돌도록 설정
        while (right < arr.length) {
            sum += arr[right];
            right++;
            if (sum == m) {
                count ++;
                right ++;
            }

            while (sum > m) {
                sum -= arr[left++];
                if (sum == m) {
                    count ++;
                }
            }
        }

        return count;
    }
}

참고한 자료