๐ ๏ธ ๋ฌธ์ ๐ ๏ธ
๐๏ธ ์ค๋ช ๐๏ธ
start : ํ์ฌ ๋์ ํฉ์ ์์ ์ธ๋ฑ์ค
end : ํ์ฌ ๋์ ํฉ์ ๋ ์ธ๋ฑ์ค
sum : nums[start] + .... + nums[end] ์ ํฉ
sum ์ด s ์ด์์ด๋ฉด (end - start + 1) ์์ด์ ๊ธธ์ด ๋น๊ต
sum์ด s ์ด๊ณผ์ด๋ฉด start++ ํ์ฌ sum ๊ฐ์์ํค๊ธฐ
์๋๋ฉด end++ ํ์ฌ sum ์ฆ๊ฐ์ํค๊ธฐ
๋จ, end == n์ด ๋๋ ์๊ฐ ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ค๋จํด์ฃผ๊ธฐ!
์์ ์ค๋ช ์ ๋์ ํ์ด์ด๋ค.
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ end๊ฐ n์ด ๋๋ ์๊ฐ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ์๋ชปํด์ ๊ณ์ ํ๋ ธ์๋ค.
๊ทธ๋์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค ๋ณด๋ ๋์ ๋ค๋ฅธ ์ ์ด ์์ด์ ์ด๋ฅผ ๊ธฐ๋กํ๋ค.
๋ค๋ฅธ ์ฌ๋์ ํ์ด์์๋
start๋ถํฐ end-1 ์ธ๋ฑ์ค๊น์ง์ ํฉ์ ๋์ ํฉ์ผ๋ก ๋ณด์๋ค.
๊ทธ๋์ ์ด๋ ํ์ํ ์ฒ๋ฆฌ ์ค ํ๋๊ฐ ์์ด์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ n์ด ์๋ n+1๋ก ์ ์ธํด์ฃผ์ด์ผํ๋ค๋ ๊ฒ์ด๋ค.
5 15
1 2 3 4 20
์์ ๊ฐ์ด ์ ๋ ฅ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ ์ ๋ต์ 1์ด๋ค.
๊ทธ๋ฌ๋ ๋ง์ฝ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ n์ผ๋ก ์ ์ธํ๋ฉด ๋ง์ง๋ง ์ธ๋ฑ์ค ๊ฐ๊น์ง ํ์์ ํ ์ ์์ด 0์ผ๋ก ์ถ๋ ฅ๋๋ค.
์ฆ, start๊ฐ 4์ ์์ผ๋ฉด end๋ 5์ ์์ด์ผ ๋์ ํฉ์ด 20์ด ๋๊ธฐ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ์ฒ์์๋ ๋๋ ์์ ๊ฐ์ด ์ฒ๋ฆฌ๋ฅผ ์ํด์ฃผ์ด์ ํ๋ ธ๋ ํด๋ณด์๋๋ฐ ๋์๊ฒ๋ ์ฌ๋ฐ๋ฅธ ํด๊ฒฐ์ฑ ์ด ์๋์๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์์ธ์ฒ๋ฆฌ๊ฐ ํ์ํ ์ ์๋ค๋ ๊ฒ์ ์์๋ค.
์ฐ์ ๋ฌธ์ ๋ฅผ ๊ผผ๊ผผํ ๋ณด๊ณ ๋์ ์ํฉ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํด ์ด๋ฅผ ํด๊ฒฐํด ๋๊ฐ์ผ๊ฒ ๋ค.
๐ ํ์ด ๐
package Baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class TwoPointer1806 {
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 s = Integer.parseInt(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(minLength(nums, s));
}
public static int minLength(int[] nums, int target) {
int answer = Integer.MAX_VALUE;
int start = 0;
int end = 0;
int sum = nums[0];
while(start < nums.length && end < nums.length) {
if(sum >= target) {
answer = Math.min(answer, end - start + 1);
}
if(sum > target) {
sum -= nums[start];
start++;
}
else {
end++;
if(end == nums.length) {
break;
}
sum += nums[end];
}
}
if(answer == Integer.MAX_VALUE) {
answer = 0;
}
return answer;
}
}
'ProgramSolve > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 10942๋ฒ - ํฐ๋ฆฐ๋๋กฌ? (Java) (0) | 2023.12.22 |
---|---|
[BOJ] 17609๋ฒ - ํ๋ฌธ (Java) (0) | 2023.12.13 |
[BOJ] 11779๋ฒ - ์ต์๋น์ฉ ๊ตฌํ๊ธฐ2 (Java) (2) | 2023.12.08 |
[BOJ] 13270๋ฒ - ํผ๋ณด๋์น ์นํจ (Java) (2) | 2023.12.06 |
[BOJ] 12851๋ฒ - ์จ๋ฐ๊ผญ์ง2 (Java) (0) | 2023.12.04 |