ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ
๋ฆฌ์คํธ๋ ๋ฐฐ์ด์ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํด์ผ ํ ๋, ๋ ๊ฐ์ ์ ์ ์์น๋ฅผ ๊ธฐ๋กํ๋ฉด์ ์ฒ๋ฆฌํ๋ ์๊ณ ๋ฆฌ์ฆ
1. ์๋ฆฌ
1. ์์์ ๊ณผ ๋์ ์ด ์ฒซ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฅดํค๋๋ก ํ๋ค.
2. ๋ชฉํ๊ฐ ๋ณด๋ค ์์์ ์ธ๋ฑ์ค๋ถํฐ ๋์ ์ ์ธ๋ฑ์ค๊น์ง์ ๊ฒฐ๊ณผ๊ฐ์ด ์์ผ๋ฉด ๋์ (end)๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
3. ๋ชฉํ๊ฐ ๋ณด๋ค ์์์ ์ธ๋ฑ์ค๋ถํฐ ๋์ ์ ์ธ๋ฑ์ค๊น์ง์ ๊ฒฐ๊ณผ๊ฐ์ด ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์์์ (start)๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
4. ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ ๋๊ฐ์ง 2~3๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
2. ์์
์์ ๋ฅผ ํตํด ์์๋ณด์.
ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ์ ์ธ ๋ฌธ์ ์ธ ํน์ ํ ํฉ์ ๊ฐ์ง๋ ๋ถ๋ถ ์ฐ์ ์์ด ์ฐพ๊ธฐ๋ก ์์๋ณด์.
์๋์ ๊ฐ์ ์์ด์ด ์๋ค.
์ฌ๊ธฐ์ ์ฐ์๋๋ ์์ ํฉ์ด 5 ์ผ๋์ ๊ฐ์๋ฅผ ๊ตฌํด๋ณด์.
ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ก์ง์ ๋ฐ๋ฅธ๋ค.
1. ์์์ ๊ณผ ๋์ ์ด ์ฒซ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค(0)๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค.
2. ํ์ฌ ๋ถ๋ถ ํฉ์ด 5์ ๊ฐ๋ค๋ฉด ์นด์ดํธํ๋ค.
3. ํ์ฌ ๋ถ๋ถ ํฉ์ด 5๋ณด๋ค ์๋ค๋ฉด ๋์ (end)๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
4. ํ์ฌ ๋ถ๋ถ ํฉ์ด 5๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด start๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
5. ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ ๋๊น์ง 2~4๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ๋ฉด ์ดํด๊ฐ ๋ ๋น ๋ฅผ๊ฒ์ด๋ค.
[step1] ์์์ ๊ณผ ๋์ ์ด ์ฒซ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํจ
- ํ์ฌ์ ๋ถ๋ถ ํฉ: 1
- ๋ถ๋ถ ํฉ์ด 5๊ฐ ์๋๋ฏ๋ก ์นด์ดํธ๋ 0
[step2] ๋ถ๋ถ ํฉ์ด 5๋ณด๋ค ์์ผ๋ฏ๋ก ๋์ (e)๋ฅผ 1 ์ฆ๊ฐ์ํด.
- ํ์ฌ ๋ถ๋ถ ํฉ: 3
- ๋ถ๋ถ ํฉ์ด 5๋ณด๋ค ์์ผ๋ฏ๋ก ์นด์ดํธ๋ 0
[step3] ๋ถ๋ถ ํฉ์ด 5๋ณด๋ค ์์ผ๋ฏ๋ก ๋์ (e)๋ฅผ 1 ์ฆ๊ฐ์ํด.
- ํ์ฌ ๋ถ๋ถ ํฉ: 6
- ๋ถ๋ถ ํฉ > 6 ์ด๋ฏ๋ก ์นด์ดํธ๋ 0
[step4] ๋ถ๋ถ ํฉ(6) > 5 ์ด๊ธฐ์ ์์์ (s)๋ฅผ 1 ์ฆ๊ฐ์ํด. (์ด๋ ์ค์ํ ์ ์ด, ๋ถ๋ถ ํฉ์์ ์์์ ์ ์ฆ๊ฐ์ํค๊ธฐ ์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๊ฐ์ ๋นผ์ค์ผํ๋ค!)
- ๋ถ๋ถ ํฉ: 5
- ๋ถ๋ถํฉ = 5 ์ด๋ฏ๋ก ์นด์ดํธ๋ 1
[step5] ๋ถ๋ถ ํฉ(5) = 5 ์ด๊ธฐ์ ์์์ ์ 1 ์ฆ๊ฐ์ํด. (๋ง์ฐฌ๊ฐ์ง๋ก ๋ถ๋ถ ํฉ์์ 2๋ฅผ ๋นผ์ค์ผํ๋ค.)
- ๋ถ๋ถ ํฉ: 3
- ๋ถ๋ถ ํฉ < 5์ด๋ฏ๋ก ์นด์ดํธ๋ ๊ทธ๋๋ก 1
[step6] ๋ถ๋ถ ํฉ(3) < 5 ์ด๊ธฐ์ ๋์ ์ 1 ์ฆ๊ฐ์ํด.
- ๋ถ๋ถ ํฉ: 7
- ๋ถ๋ถ ํฉ > 5 ์ด๋ฏ๋ก ์นด์ดํธ๋ ๊ทธ๋๋ก 1
[step7] ๋ถ๋ถ ํฉ(7) > 5 ์ด๊ธฐ์ ์์์ ์ 1 ์ฆ๊ฐ์ํค๊ณ , ๋ถ๋ถ ํฉ์์ 3์๋นผ์ค.
- ๋ถ๋ถ ํฉ: 4
- ๋ถ๋ถ ํฉ < 5 ์ด๋ฏ๋ก ์นด์ดํธ๋ ๊ทธ๋๋ก 1
[step8] ๋ถ๋ถ ํฉ(4) < 5 ์ด๊ธฐ์ ๋์ ์ 1 ์ฆ๊ฐ์ํจ๋ค.
- ๋ถ๋ถ ํฉ: 9
- ๋ถ๋ถ ํฉ > 5 ์ด๋ฏ๋ก ์นด์ดํธ๋ ๊ทธ๋๋ก 1
[step9] ๋ถ๋ถ ํฉ(9) > 5 ์ด๊ธฐ์ ์์์ ์ 1 ์ฆ๊ฐ์ํค๊ณ , ๋ถ๋ถ ํฉ์์ 4๋ฅผ ๋บด์ค
- ๋ถ๋ถ ํฉ: 5
- ๋ถ๋ถ ํฉ = 5 ์ด๋ฏ๋ก ์นด์ดํธ +1 (์ด: 2)
[end] ์์์ ๊ณผ(s) ๋์ (e)์ด ๋ง์ง๋ง ์ธ๋ฑ์ค์ ๋๋ฌํ๊ธฐ ๋๋ฌธ์ ํ์์ ์ข ๋ฃํ๋ค.
3. ์ฝ๋
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
int N = 5;
int M = 5;
int[] numbers = {1,2,3,4,5};
int sum = 0;
int count = 0;
int end = 0;
for(int start = 0; start < N; start++) {
// ๋ถ๋ถํฉ์ด M๋ณด๋ค ์์ ๋ end 1 ์ฆ๊ฐ
while(sum < M && end < N) {
sum += numbers[end];
end++;
}
// ๋ถ๋ถํฉ์ด M์ผ๋ count 1 ์ฆ๊ฐ
if(sum == M) count++;
// while ๋ฐ๋ณต๋ฌธ์ด ๋ชจ๋ ๋๋๊ณ ๋ถ๋ถํฉ์ด M๋ณด๋ค ํด ๋
sum -= numbers[start];
}
System.out.println(count);
}
}
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
int N = 5;
int M = 5;
int[] numbers = {1,2,3,4,5};
int count = 0;
int start = 0;
int end = 0;
int sum = 0;
while (end < N) {
sum += numbers[end];
end++;
while (sum >= M) {
if(sum == M) count++;
sum -= numbers[start];
start++;
}
}
System.out.println(count);
}
}
4. ์์๋ฌธ์ ์ถ์ฒ(๋ฐฑ์ค)
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
