๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/21921
21921๋ฒ: ๋ธ๋ก๊ทธ
์ฒซ์งธ ์ค์ $X$์ผ ๋์ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์จ ๋ฐฉ๋ฌธ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ์ต๋ ๋ฐฉ๋ฌธ์ ์๊ฐ 0๋ช ์ด๋ผ๋ฉด SAD๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ์ต๋ ๋ฐฉ๋ฌธ์ ์๊ฐ 0๋ช ์ด ์๋ ๊ฒฝ์ฐ ๋์งธ ์ค์ ๊ธฐ๊ฐ์ด ๋ช ๊ฐ ์๋์ง ์ถ๋ ฅํ๋ค
www.acmicpc.net
โธ ๋ฌธ์
์ฐฌ์์ด๋ ๋ธ๋ก๊ทธ๋ฅผ ์์ํ ์ง ๋ฒ์จ N์ผ์ด ์ง๋ฌ๋ค.
์์ฆ ๋ฐ๋น ์ ๊ด๋ฆฌ๋ฅผ ๋ชป ํ๋ค๊ฐ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ ๋ดค๋๋ ๋ฒ์จ ๋์ ๋ฐฉ๋ฌธ ์๊ฐ 6๋ง์ ๋์๋ค.
์ฐฌ์์ด๋ X์ผ ๋์ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์จ ๋ฐฉ๋ฌธ์ ์์ ๊ทธ ๊ธฐ๊ฐ๋ค์ ์๊ณ ์ถ๋ค.
์ฐฌ์์ด๋ฅผ ๋์ ํด์ X์ผ ๋์ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์จ ๋ฐฉ๋ฌธ์ ์์ ๊ธฐ๊ฐ์ด ๋ช ๊ฐ ์๋์ง ๊ตฌํด์ฃผ์.
โธ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ธ๋ก๊ทธ๋ฅผ ์์ํ๊ณ ์ง๋ ์ผ์ N์ X๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์๋ ๋ธ๋ก๊ทธ ์์ 1์ผ์ฐจ๋ถํฐ N์ผ์ฐจ๊น์ง ํ๋ฃจ ๋ฐฉ๋ฌธ์ ์๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค.
โธ ์ถ๋ ฅ
์ฒซ์งธ ์ค์ X์ผ ๋์ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์จ ๋ฐฉ๋ฌธ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ์ต๋ ๋ฐฉ๋ฌธ์ ์๊ฐ 0๋ช ์ด๋ผ๋ฉด SAD๋ฅผ ์ถ๋ ฅํ๋ค.
๋ง์ฝ ์ต๋ ๋ฐฉ๋ฌธ์ ์๊ฐ 0๋ช ์ด ์๋ ๊ฒฝ์ฐ ๋์งธ ์ค์ ๊ธฐ๊ฐ์ด ๋ช ๊ฐ ์๋์ง ์ถ๋ ฅํ๋ค.
โธ ์ ํ
- โ1≤X≤N≤250,000
- โ0≤ ๋ฐฉ๋ฌธ์ ์ ≤8,000
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ์ค๋ฒ 3
- ๐ ๋ฌธ์ ์ ํ : ๋์ ํฉ, ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
5 3
1 4 2 5 1
์์ ์์๋ก ํ์ด๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
(1)
1 | 4 | 2 | 5 | 1 |
1, 4, 2 ๊ตฌ๊ฐ, sum = 7
(2)
1 | 4 | 2 | 5 | 1 |
4, 2, 5 ๊ตฌ๊ฐ, sum = 11
(3)
1 | 4 | 2 | 5 | 1 |
2, 5, 1 ๊ตฌ๊ฐ, sum = 8
x์นธ๋งํผ ์ฃผํฉ์ ๋ถ๋ถ์ ์์ผ๋ก ์์ง์ด๋ฏ๋ก '์ฌ๋ผ์ด๋ฉ ์๋์ฐ'๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
(1)์์์ ํฉ์ 7์ด์๊ณ ,
(2)์ ๊ฐ์ด ์์ผ๋ก ํ ์นธ ์ด๋ํ ๋๋ ๋น ์ง๋ 1์ ๋นผ์ฃผ๊ณ ์๋ก ๋ค์ด์ค๋ 5๋ฅผ ๋ํด์ฃผ๋ฉด ๋๋ค.
์ด ๊ณผ์ ์ ๋ฐ๋ณตํด ์ฃผ๋ฉด, ์ฃผํฉ์ ๋ถ๋ถ์ ํฉ ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ด x์ผ ๋์ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์จ ๋ฐฉ๋ฌธ์ ์๊ฐ ๋๋ค.
์ต๋ ๋ฐฉ๋ฌธ์ ์์๋ ๊ธฐ๊ฐ์
ํ์ฌ ์ต๋์น(๋ฐฉ๋ฌธ์ ์) ๋ณด๋ค ํฌ๋ค๋ฉด ์ต๋์น๋ฅผ ๊ฐฑ์ ํด ์ฃผ๊ณ ,
ํ์ฌ ์ต๋์น์ ๋์ผํ๋ค๋ฉด ๋ ์ง๋ฅผ ์นด์ดํ ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํด์ฃผ์๋ค.
๐ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋(Sliding window)?
- ์๋์ฐ(ํน์ ๋ฒ์)๊ฐ ์์ ๋, ์๋์ฐ ๋ด๋ถ ์์์ ๊ฐ์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์ดํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ์์ ์์์ ์ผ์ ๋ฒ์์ ๊ฐ์ ๋น๊ตํ ๋ ์ฌ์ฉํ๋ฉด ์ ์ฉํ๋ค.
- ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ, ๋ถ๋ถ ๋ฌธ์์ด ๊ตฌํ๊ธฐ ๋ฑ์ ํ์ฉ ๊ฐ๋ฅ
๐ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ์ ํฌ ํฌ์ธํฐ
[ ๊ณตํต์ ]
- ์ ํ ๋ฐฐ์ด(1์ฐจ์ ๋ฐฐ์ด)์ 2ํ ์ด์ ๋ฐ๋ณต์ ์ผ๋ก ํ์ํด์ผ ํ ๊ฒฝ์ฐ,
- O(N²) ์ด์ ๊ฑธ๋ฆด ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ถ๋ถ ๋ฐฐ์ด์ ํ์ฉํ์ฌ O(N)์ผ๋ก ์ค์ผ ์ ์๋ค.
[ ์ฐจ์ด์ ]
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ๊ตฌ๊ฐ์ ๊ธธ์ด๋ฅผ ๊ณ ์ ์ ์ผ๋ก ์ก๊ธฐ ๋๋ฌธ์ ํฌ์ธํฐ๊ฐ ํ๋๋ง ํ์ํ๋ค.
- ์ฆ, ๊ณ ์ ์ ์ธ ๋ถ๋ถ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๋ณ์๊ฐ ์๋ค๋ฉด ํฌ์ธํฐ๊ฐ ํ๋๋ง ์์ด๋ ๋ถ๋ถ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ ๋ฐฐ์ด์ ๋์ ์ ์ ์๋ค.
- ๋ฐ๋ฉด, ํฌ ํฌ์ธํฐ๋ ๊ตฌ๊ฐ์ ๊ธธ์ด๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ก๊ธฐ ๋๋ฌธ์ ๊ตฌ๊ฐ์ ์์ชฝ ๋์ด ๋๋ ํฌ์ธํฐ ๋ ๊ฐ๊ฐ ํ์ํ๋ค.
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 38940KB
์๊ฐ : 308ms
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // ๋ธ๋ก๊ทธ๋ฅผ ์์ํ๊ณ ์ง๋ ์ผ์
int x = Integer.parseInt(st.nextToken()); // x์ผ ๋์
st = new StringTokenizer(br.readLine());
int[] arr = new int[n];
for (int i = 0; i < n; i++) { // 1์ผ์ฐจ๋ถํฐ n์ผ์ฐจ๊น์ง ํ๋ฃจ ๋ฐฉ๋ฌธ์ ์ ์
๋ ฅ
arr[i] = Integer.parseInt(st.nextToken());
}
int sum = 0; // ๋ฐฉ๋ฌธ์์์ ํฉ
int day = 1; // x์ผ ๋์ ๋ฐฉ๋ฌธ์๊ฐ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์จ ๊ธฐ๊ฐ
for (int i = 0; i < x; i++) sum += arr[i]; // 1์ผ๋ถํฐ x์ผ๊น์ง ๋ฐฉ๋ฌธ์์์ ํฉ
int max = sum; // ์ต๋ ๋ฐฉ๋ฌธ์์
for (int i = x; i < n; i++) {
sum -= arr[i-x]; // ์ฒซ๋ฒ์งธ ์ ์ธ
sum += arr[i];
if (max < sum) { // ์ต๋ ๋ฐฉ๋ฌธ์์ ๊ฐฑ์
day = 0; // ๊ธฐ๊ฐ ์ด๊ธฐํ ํ ์ฆ๊ฐ
day++;
max = sum;
} else if (max == sum) { // ์ต๋ ๋ฐฉ๋ฌธ์์๊ฐ ๊ฐ์ ๊ธฐ๊ฐ์ด๋ฉด
day++;
}
}
if (max == 0) { // ์ต๋ ๋ฐฉ๋ฌธ์ ์๊ฐ 0๋ช
bw.append("SAD" + "\n");
bw.flush();
return;
}
bw.append(max + "\n" + day);
bw.flush();
bw.close();
br.close();
}
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_1238] ํํฐ (2) | 2024.03.21 |
---|---|
[Boj_2252] ์ค ์ธ์ฐ๊ธฐ (1) | 2024.01.11 |
[Boj_2447] ๋ณ ์ฐ๊ธฐ - 10 (0) | 2023.11.28 |
[Boj_1074] Z (1) | 2023.11.28 |
[Boj_1992] ์ฟผ๋ํธ๋ฆฌ (1) | 2023.11.28 |