Tiny Bunny
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ(Sliding Window)

by soonybutter 2024. 10. 28.
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

TOP

Designed by ํ‹ฐ์Šคํ† ๋ฆฌ