-
[Algorithm] Sliding Window ์๊ณ ๋ฆฌ์ฆ๐ปProgramming/Algorithm 2024. 3. 3. 16:53
๋ฌธ์
12 15 11 20 25 10 20 19 13 15
์ ๊ฐ์ N๊ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐฐ์ด๊ณผ ๋ณ์ K๊ฐ ์ฃผ์ด์ก์ ๋ ์ฐ์๋ K๊ฐ์ ํฉ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ตฌํด๋ผ
์์ ์ ๋ ฅ
10 3 12 15 11 20 25 10 20 19 13 15
์์ ์ ๋ ฅ์ ์ฒซ๋ฒ์งธ ์๋ N๊ฐ์ ๋ฐฐ์ด์ ์ค๊ฒ์ด๋ค๋ผ๋ ๊ฒ์ด๊ณ , ๋๋ฒ์งธ ์๋ K๋ฅผ ์ฃผ๋ ๊ฒ์ด๋ค.
์์ ์ถ๋ ฅ
56
์ฒ์์ ๋ด๊ฐ ์งฐ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ค for๋ฌธ์ ์ฌ์ฉํ์๋ค. ๊ทธ๋ฌ๋๋ ๋ Timeout Error๊ฐ ๋ฐ์ํ์๋ค. ๋๋ ์ด์ค for๋ฌธ์ ์ด์ฉํด๋ ์๊ฐ๋ณต์ก๋๊ฐ O(N)์ผ๊ฑฐ๋ผ๊ณ ์๊ฐํ์๋ค. ์ ์์ ์ ๋ ฅ์ ๊ฒฝ์ฐ์๋,,, ์๊ฐํด๋ณด๋ฉด ๋ง์ฝ N์ด 100000์ธ๋ฐ, K๊ฐ 60000์ด๋ค? ๊ทธ๋ฌ๋ฉด ์๊ฐ๋ณต์ก๋๋ ๊ฑฐ์ O(N*N)์ด ๋์ด๋ฒ๋ฆฐ๋ค.. ๊ทธ๋์ ํ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ ๊ฒ์ด๋ค.
ํ์ง๋ง Sliding Window ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์๊ฐ๋ณต์ก๋๊ฐ O(N)์ด ๋๋ค.
์ผ๋จ ์ฒ์์ window์ k๋งํผ for๋ฌธ์ ๋์ ๋ฐฐ์ด ๊ฐ์ ๋ํด์ค๋ค. ๊ทธ ๋ค์ window๋ก ์ด๋ํ๋ฉด ์ด์ window์ k-1๊ฐ๊ฐ ๊ฒน์น๋ค. ๊ทธ๋์ ์ด์ window๊ฐ์์ ๊ฒน์น์ง ์๋ ๊ฐ์ ๋นผ์ฃผ๊ณ , ์๋ก ์ถ๊ฐ๋ ๊ฐ์ ๋ํด์ฃผ๋ฉด for๋ฌธ์ ํ ๋ฒ ๋ ๋ ํ์๊ฐ ์์ด์ ธ ์๊ฐ๋ณต์ก๋๊ฐ O(N)์ด ๋๋ค.
import java.util.Scanner; public class Section3_3_MyVer { private int solution(int n, int m, int[] list) { int answer; int window = 0; for(int i = 0; i < m; i++) { window += list[i]; } answer = window; for(int j = 1; j < n-m+1; j++) { window += (-list[j-1] + list[j+m-1]); if(window > answer) { answer = window; } } return answer; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Section3_3_MyVer main = new Section3_3_MyVer(); int n = scanner.nextInt(); int m = scanner.nextInt(); int[] list = new int[n]; for(int i = 0; i < n; i++) { list[i] = scanner.nextInt(); } System.out.println(main.solution(n, m, list)); } }
์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐํ์ผ๋ก ์ฝ๋๋ฅผ ์งฐ๋๋ Timeout Error๊ฐ ๋ฐ์ํ์ง ์๊ณ ํต๊ณผํ์๋ค.
'๐ปProgramming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ฝ์ ์ ๋ ฌ(Insertion Sort) (0) 2024.03.28 [Algorithm] ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort) (0) 2024.03.27 [Algorithm] ์ ํ์ ๋ ฌ(Selection Sort) (0) 2024.03.26 [Algorithm] ์ฐ์ ๋ถ๋ถ์์ด (0) 2024.03.05 [Algorithm] Two pointers ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ๊ณตํต์์ ๊ตฌํ๊ธฐ (0) 2024.03.02