728x90

์ฌ๋ผ์ด๋ฉ ์๋์ฐ(Sliding Window)
- ๊ณ ์ ๋ ์ฌ์ด์ฆ์ ์๋์ฐ(์ฐฝ)์ด ๋ฐฐ์ด ์์ ์ด๋ํ๋ฉด์ ์๋์ฐ ๋ด์ ๋ด์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ๋ฌธ์ ๋ฅผ ํธ๋ ์๊ณ ๋ฆฌ์ฆ.
- ์ฐจ์ด๊ฐ ๋๋ ์์ชฝ ๋ ์์๋ฅผ ๊ฐฑ์ ํ๋ค.
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ํญ์ ๊ตฌ๊ฐ์ ๋๋น๊ฐ ๊ณ ์ ๋์ด ์ฃผ์ด์ง๋ค.

๋ง์ฝ, ์๋์ฐ์ ํฌ๊ธฐ๊ฐ 3์ผ ๊ฒฝ์ฐ
sw[0] = arr[0] + arr[1] + arr[2]
.
.
.
sw[n] = sw[n-1] - arr[n-1] + arr[n-1+(์๋์ฐํฌ๊ธฐ)]
์์
Q. ์ฐ์๋ index n๊ฐ์ ํฉ์ ์ต์๋ฅผ ๊ตฌํ์์ค. ๊ทธ๋ฆฌ๊ณ ํฉ์ด ์ต์์ผ ๋์ ์ธ๋ฑ์ค(a,b)๋ฅผ ๊ตฌํ์์ค.
(a<=b);
1. sw๋ฐฐ์ด์ ๋ชจ๋ ๋ด๊ณ ์ต์๊ฐ ๊ตฌํ๋ ๋ฐฉ์
import java.util.Scanner;
public class Main {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
int arr[] = {3,15,12,16,4,2,1,13,12};
int sw[]=new int[arr.length];
int n = sc.nextInt();
for(int i=0;i<n;i++) {
sw[0] += arr[i];
}
int swIdx =1;
int minn = sw[0];
int minIdx =0;
while(swIdx<=arr.length-n) {
sw[swIdx]=sw[swIdx-1]-arr[swIdx-1]+arr[swIdx-1+n];
if(sw[swIdx]<minn) {
minn =sw[swIdx];
minIdx = swIdx;
}
swIdx++;
}
System.out.println("์ต์: " + minn + " (" + minIdx + " , "+ (minIdx+n-1) + ")");
return;
}
}
2. sw์ ๊ตณ์ด ๋ฐฐ์ด๋ก ๋ง๋ค์ง ์๊ณ ํ์ดํ๋ ๋ฐฉ์
import java.util.Scanner;
public class Main {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
int arr[] = {3,15,12,16,4,2,1,13,12};
int sw=0;
int n = sc.nextInt();
for(int i=0;i<n;i++) {
sw += arr[i];
}
int startIdx =0;
int endIdx = n;
int minn = sw;
int minStartIdx =0;
int minEndIdx =n-1;
while(endIdx<arr.length) {
sw=sw-arr[startIdx]+arr[endIdx];
if(sw<minn) {
minn =sw;
minStartIdx = startIdx+1;
minEndIdx = endIdx;
}
startIdx++;
endIdx++;
}
System.out.println("์ต์: " + minn + " (" + minStartIdx + " , "+ (minEndIdx) + ")");
return;
}
}
728x90
'๐ป > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋์ ํฉ(Prefix Sum) +Java๊ฐ์ฒด ๋ฐฐ์ด ์ ์ธ & ์์ฑ (2) | 2024.10.28 |
---|---|
ํผ๋ณด๋์น ์์ด ๊ตฌํํ๊ธฐ (0) | 2024.07.22 |