2023. 10. 18. 14:21ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1221
-> ์ด์ ๋ฌธ์ ํ์ด
3. ์ต๋ ๋งค์ถ
์ค๋ช
ํ์์ ์๋น ๋ ์ ๊ณผ์ ์ ์ด์ํฉ๋๋ค. ํ์ ์๋น ๋ ํ์์๊ฒ N์ผ ๋์์ ๋งค์ถ๊ธฐ๋ก์ ์ฃผ๊ณ ์ฐ์๋ K์ผ ๋์์ ์ต๋ ๋งค์ถ์ก์ด ์ผ๋ง์ธ์ง ๊ตฌํ๋ผ๊ณ ํ์ต๋๋ค.
๋ง์ฝ N=10์ด๊ณ 10์ผ ๊ฐ์ ๋งค์ถ๊ธฐ๋ก์ด ์๋์ ๊ฐ์ต๋๋ค. ์ด๋ K=3์ด๋ฉด
12 1511 20 2510 20 19 13 15
์ฐ์๋ 3์ผ๊ฐ์ ์ต๋ ๋งค์ถ์ก์ 11+20+25=56๋ง์์ ๋๋ค.
์ฌ๋ฌ๋ถ์ด ํ์๋ฅผ ๋์์ฃผ์ธ์.
์ ๋ ฅ
์ฒซ ์ค์ N(5<=N<=100,000)๊ณผ K(2<=K<=N)๊ฐ ์ฃผ์ด์ง๋๋ค.
๋ ๋ฒ์งธ ์ค์ N๊ฐ์ ์ซ์์ด์ด ์ฃผ์ด์ง๋๋ค. ๊ฐ ์ซ์๋ 500์ดํ์ ์์ด ์๋ ์ ์์
๋๋ค.
์ถ๋ ฅ
์ฒซ ์ค์ ์ต๋ ๋งค์ถ์ก์ ์ถ๋ ฅํฉ๋๋ค.
์์ ์ ๋ ฅ 1
10 3
12 15 11 20 25 10 20 19 13 15
์์ ์ถ๋ ฅ 1
56
๋ฌธ์ ํ์ด 1
public int solution2(int n, int k, int[] a) {
int max = Integer.MIN_VALUE;
for (int i = 0; i <= n - k; i++) {
int sum = 0;
for (int j = 0; j < k; j++) {
sum += a[i + j];
}
max = Math.max(max, sum);
}
return max;
}
๐ฉ๐ป๐ป : ๋์ ์ฒซ๋ฒ์งธ ์๋์๋ค... ์ด์ค for๋ฌธ.. ๊ทธ๊ฑฐ ์ด๋ป๊ฒ ์์ฐ๋ ๊ฑด๋ฐ...
์ด์ค for ๋ฌธ์ผ๋ก๋ง ํด๊ฒฐํ๋ ค๊ณ ํ๋๊น... ์๊พธ ์๊ฐ ์ด๊ณผ ๋ฌ๋ค.. (๋น์ฐํจ)
๋ฌธ์ ํ์ด 2
public int solution(int n, int k, int[] a) {
int max = 0;
int sum = 0;
for (int i = 0; i <= n - k; i++) {
if (i == 0) {
for (int j = 0; j < k; j++) {
sum += a[i + j];
max = sum;
}
}else {
sum = sum - a[i - 1] + a[i + k - 1];
max = Math.max(max, sum);
}
}
return max;
}
๐ฉ๐ป๐ป : ์ด๋ป๊ฒ ํ์ด์ผํ ์ง.. ๋ง๋งํดํ๋ ์์ค์... ๊ฐ์ ํํธ๋ก Sliding Window ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค ํด์... ๊ทธ๋ผ Sliding Window ๊ฐ ๋ญ๋ฐ! ํ๊ณ ๊ตฌ๊ธ์ ์ณ์ ํด๋ต์ ์์๋๋ค..! ์ ๋ ์นด !
๋ณด๋ฉด ์ฃผ์ด์ง ์ k ๋ผ๋ ์ฐฝ๋ฌธ์ ๋ง๋ค๊ณ ,, ๊ทธ ๋ค์ ํ๋์ฉ ์์ผ๋ก ์ฎ๊ฒจ๊ฐ๋ฉด์ ๋ํ๊ธฐ๋ฅผ ํ๋๊น ๊ธฐ์กด 2๊ฐ์ ๊ฐ์ ๊ทธ๋๋ก๋ค. ์ด์ ๊ฐ์ ๋นผ๊ณ , ๊ทธ ๋ค์ ๊ฐ์ ๋ํ๊ณ ... ํ๋ ๊ฒ์ผ ๋ฟ์ด๊ธฐ ๋๋ฌธ์
๋จผ์ ์ด๋ฐ i[0] + i[1] + i[2] ์ ํฉ์ ๊ตฌํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ i= 0 ์ผ๋๋ k ๋งํผ sum์ ๋์ ํด์ ๋ํ๊ณ , max ๊ฐ์ sum ๊ฐ์ ๋ฃ์ด์คฌ๋ค.
๊ทธ ๋ค์ ๋ถํฐ๋ sum์ ๋งจ ์ฒ์ ๊ฐ์ ๋นผ๊ณ , ์ด์ ์์ผ๋ก ํ์นธ ์ฎ๊ธฐ๋ ์๋ก์ด ๊ฐ์ ๋ํด์ฃผ๋ฉด ๋๋ค. ๊ทธ ํ max์ sum ๊ฐ์ ๋น๊ตํด์ max ๊ฐ์ ๊ฐฑ์ ํด์ฃผ๋ฉด ๋๋ค.
๋ฌธ์ ํ์ด 3
public int solution3(int n, int k, int[] arr) {
int answer, sum = 0;
for (int i = 0; i < k; i++) sum += arr[i];
answer = sum;
for (int i = k; i < n; i++) {
sum += (arr[i] - arr[i - k]);
answer = Math.max(answer, sum);
}
return answer;
}
๐พ : ๊ฐ์ฌ๋์ for๋ฌธ์ ๋๋ ์ ๋จผ์ sum์ ๋ฐฐ์ด์ ๋งจ ์ฒ์๋ถํฐ k ๋ฒ์งธ๊น์ง์ ๊ฐ์ ๋ํด์ฃผ๊ณ , ๊ทธ ๋ค์ for๋ฌธ์์๋ k ๋ฒ์งธ๋ถํฐ ์์ํด์ arr[i] ๊ฐ์ ๋ํ๊ณ , arr[i-k] ๊ฐ์ ๋นผ์ฃผ๋๋ก ํ๋ค.