1. ๋ฌธ์ ์ค๋ช ๐
2. ์ ๊ทผ ๋ฐฉ์ ๐๏ธ
KEY WORD
: one-way Two pointer
๋จ๋ฐฉํฅ ํฌ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ์ ํ์ ์ธ ๋ฌธ์ ์ด๋ค. ์ผ์ชฝ ํฌ์ธํฐ(L)๊ณผ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ(R)์ ๋๋ค. ํด๋น ๊ตฌ๊ฐ ๋ด ์๋ค์ ํฉ์ sum
์ด๋ผ ํ๊ฒ ๋ค.
sum < M
: R ํฌ์ธํฐ๋ฅผ ์ ์ง์ํจ๋ค.sum >= M
: L ํฌ์ธํฐ๋ฅผ ์ ์ง์ํจ๋ค. (๋ง์ฝsum == M
์ด๋ฉด ๋ต์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ +1 ์ฌ๋ฆฐ๋ค.)- ๊ตฌ๊ฐ ๋ด์ ํฉ์ ๊ตฌ๊ฐ ๋ด์ ๊ฐ์ด ์์ ํ๋์ธ ๊ฒฝ์ฐ๋ ํฌํจํ๋ค. ๋ฐ๋ผ์
arr[0] == M
์ธ ๊ฒฝ์ฐ๋ ์์ธ ์์ด ๊ณ์ฐ์ ํฌํจ๋๋๋ก ํด์ค์ผ ํ๋ค.
๋๋ 3๋ฒ์ ๊ท์น์ ์งํค๊ธฐ ์ํด ๋ฐฐ์ด์ N+1๋ก ๋ง๋ค์ด ๊ฐ๋ค์ 1๋ถํฐ ์ฑ์ฐ๊ณ , ํฌ์ธํฐ๋ค์ 0๋ถํฐ ์์ํ๋๋ก ํ์๋ค.
3. ์ฝ๋ ์๊ฐ ๐
import java.io.*;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
/*
* 2003 - ์๋ค์ ํฉ
* ๋ฐฉ๋ฒ - ๋จ๋ฐฉํฅ ํฌ ํฌ์ธํฐ ํ์ฉ
* */
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());
int M = Integer.parseInt(st.nextToken());
int [] arr = new int [N+1];
int ans = 0;
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int L = 0; int R = 0; int sum = 0;
while (L <= N && R <= N){
if(sum < M) {
R++;
if(R <= N) sum += arr[R];
}else{
if(sum == M) ans++;
L++;
if(L <= N) sum -= arr[L];
}
}
System.out.println(ans);
}
}
4. ๋ฐฐ์ด ๊ฒ๋ค ๐ฏ
ํฌ ํฌ์ธํฐ์ ๊ธฐ๋ณธํ์ ์ง์ ํ์ด๋ณด๋ฉฐ ๊ฐ์ ์ตํ๋ค. ์์ฉ๋ ๋ฒ์ ๋ค๋ ํ์ด๋ด์ผ๊ฒ ๋ค.
0