하루에 한 문제

[BOJ-2003][투 포인터] 수들의 합2 -Java 본문

알고리즘/백준

[BOJ-2003][투 포인터] 수들의 합2 -Java

dkwjdi 2021. 4. 19. 17:04

https://www.acmicpc.net/problem/2003

 

2003번: 수들의 합 2

첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.

www.acmicpc.net

package BOJ_투포인터;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class boj_2003_수들의합2 {
	public static void main(String[] args) throws IOException {
		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N=Integer.parseInt(st.nextToken());
		long M=Long.parseLong(st.nextToken());
		int nums[]=new int[N];
		
		st = new StringTokenizer(br.readLine());
		for(int i=0; i<N; i++) {
			nums[i]=Integer.parseInt(st.nextToken());
		}
		
		System.out.println(solve(N,M,nums));
	}

	private static int solve(int len, long target, int[] nums) {
		int result=0;
		
		for(int i=0; i<len; i++) {
			long sum=0;
			for(int j=i; j<len; j++) {
				sum+=nums[j];
				if(sum==target) {
					result++;
					break;
				}
				else if(sum>target) break;
			}
		}
		return result;
	}

}

소요시간 : 10분

 

전형적인 투 포인터 문제입니다.

 

우선 왼쪽의 포인터는 start를 가리키고 있습니다.

그리고 오른쪽 포인터는 start부터 1씩 증가시키며 배열의 값을 더했을 때 target값이 되는지 확인해줍니다.

 

끝~

Comments