๋ฌธ์ : boj.kr/2632
๋ ์ง: 08/25 (์ผ)
์ฑ๊ณต์ฌ๋ถ: X
์ด ๋ฌธ์ ๋๋ฌด ์ด๋ ค์ ๋ค.
์ฒ์์ผ๋ก ์๊ฐํด๋ธ ๋ก์ง์ ๊ทธ๋ฅ ๋ฌด์ํ๊ฒ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ๊ตฌํด์ ์ํ๋ ๊ฐ ๋๋ ๊ฑฐ ์ฐพ์ผ๋ฉด ๋์ง ์์๊น? ํ๊ณ ๋ฌธ์ ๋ฒ์๋ฅผ ๋ดค๋๋ฐ, 3 <= m, n <= 1000์ด๋ค. 1000C1, 1000C2, 1000C3 .... ์ด๊ฑธ A, B ๋ ๋ฒ ๊ตฌํด์ A, B์ ๋ํด ๋ค for๋ฌธ ๋๋ฆฐ๋ค๋ฉด ๋ฌด์กฐ๊ฑด ์๊ฐ ์ด๊ณผ๋ ๊ฒ์ด ๋ปํ์..
๊ทผ๋ฐ ์ด๊ฑฐ ์๋๋ฉด ์๋ฌด ๋ก์ง๋ ์๊ฐ๋์ง ์์์ ํด์ค ๋ดค๋ค. ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ก์ง์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- ์ํ์ ์ ํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ง๋ค๊ธฐ
- ๋์ค๋ ๊ฐ์ ๋ํด์ A, B ๊ฐ๊ฐ ๊ฒฝ์ฐ์ ์ ๊ฐ์๋ฅผ ๊ตฌํ๊ธฐ
- ๊ตฌํ ๊ฐ์๋ฅผ ์ด์ฉํด์ ret ๊ฐ ๋ง๋ค๊ธฐ
1. ์ํ์ ์ ํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ง๋ค๊ธฐ
ํด๋น ๋ฌธ์ ๋ ํผ์๋ฅผ ์ฐ์ํด์ ํ๊ธฐ ๋๋ฌธ์ ํผ์๊ฐ ์ํ์ด๋ผ ํ๋ฐํด ๋์์ ํผ์๋ฅผ ์ ํํด ํ๋งค๋ฅผ ํ ์ ์๋ค.
์ฆ, 7 2 2 2 1๊ณผ ๊ฐ์ ํผ์๊ฐ ์์ ๋ ๊ฐ 1 7 2 ์ฒ๋ผ ์ ํํ ์๋ ์๋ค๋ ๋ป์ด๋ค. ์ด๋ฅผ ์ํ ๊ทธ๋๋ก ํ๋๊ฑด ์ด๋ ต๋ค. ๊ทธ๋์ ๋ฐฐ์ด์ ๋์ ํ๋ ๋ ๋ถ์ด๋ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ค. ํผ์๋ฅผ ํ๋งคํ ๋ ํผ์์ ์กฐ๊ฐ ๋ฒ์ ๋ด์์๋ง ํ ์ ์์ผ๋๊น ๋ค์ ๋ฐฐ์ด์ ํ๋ ๋ ๋ถ์ด๊ธฐ๋ง ํ๋ฉด ์ํ์ฒ๋ผ ์ด์ฉ์ด ๊ฐ๋ฅํ๋ค.
1๊ฐ
7 2 2 2 1 7 2 2 2 1
-
-
-
-
-
2๊ฐ
7 2 2 2 1 7 2 2 2 1
- -
- -
- -
- -
- - ์ด ๋ค์๋ถํด ๊ฐ์ ๊ฒฝ์ฐ์ ์
3๊ฐ
7 2 2 2 1 7 2 2 2 1
- - -
- - -
- - -
- - -
- - - ์ด ๋ค์๋ถํด ๊ฐ์ ๊ฒฝ์ฐ์ ์
4๊ฐ
7 2 2 2 1 7 2 2 2 1
- - - -
- - - -
- - - -
- - - -
- - - - ์ด ๋ค์๋ถํด ๊ฐ์ ๊ฒฝ์ฐ์ ์
5๊ฐ
7 2 2 2 1 7 2 2 2 1
- - - - -
์ด๋ ๊ฒ ์ ํ์ ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ์ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ ์ ์๋ ์ฌ์ค์ด ์ธ๋ฑ์ค๊ฐ 0๋ถํฐ๊ฐ ์๋ 1๋ถํฐ ์์ํ๋ค๊ณ ํ๋ฉด, 1๊ฐ์ผ๋ idx 5๊น์ง์ด๊ณ 2๊ฐ ์ผ๋ idx 6๊น์ง, 3์ผ๋๋ idx 7, 4์ผ๋๋ idx 8๊น์ง์์ ์ ์ ์๋ค. ์ด๊ฑธ ์ข ์ผ๋ฐํํ๋ฉด ์ ์ฒด ํฌ๊ธฐ n์ ๋ํด n + ๋ฝ๋ ๊ฐ์ r - 1์ด ๋๋ค.
์ฆ, ๊ฒฝ์ฐ์ ์๋ง๋ค ๊ฐ์๋ฅผ ๊ตฌํ๊ธฐ์ํด์ n + r - 1 (n: ์กฐ๊ฐ ๊ฐ์, r: ๋ฝ๋ ๊ฐ์)๊น์ง ๋ฐ๋ณตํด์ผํจ์ ์๋ฏธํ๋ค.
2. ๋์ค๋ ๊ฐ์ ๋ํด์ A, B ๊ฐ๊ฐ ๊ฒฝ์ฐ์ ์ ๊ฐ์๋ฅผ ๊ตฌํ๊ธฐ
์ฌ๊ธฐ์๋ ๋์ ํฉ ๋ก์ง์ด ์ฐ์ธ๋ค.
์์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฐ๊ฐ ๊ตฌํ ๋ ์ฌ์ค ํ๋์ฉ ๋ฝ์์ ํ ์๋ ์์ง๋ง ๊ทธ๋ฌ๋ฉด 3์ค for๋ฌธ์ผ๋ก ๊ตฌ์ฑํ ์ ๋ฐ์ ์๋ค.
๋ฝ๋ ๊ฐฏ์(1->5)
๋ฝ๋ ๊ฒฝ์ฐ์ ์ ๋ณ ๋ง์ง๋ง ์ธ๋ฑ์ค (๋ฝ๋ ๊ฐ์ -> n + ๋ฝ๋ ๊ฐ์ - 1)
์ค์ ๋ก ๋ฝ๊ธฐ (๋ฝ๋ ๊ฐ์ -> 0)
๊ทธ๋ผ ์ต์ ์ ๊ฒฝ์ฐ ๋ฝ๋ ๊ฐ์๊ฐ 1000, ์ธ๋ฑ์ค๋ 1000 * 2(์ด ๋ถ๋ถ์ ๋ถ์ ํํ๋ 1000์ธ ๊ฒ์ ํ์ค), ์ค์ ๋ก ๋ฝ๋ ๊ฒ๋ 1000
= 2000000000 ์ฝ 20์ต์ด๋ค.
ํ์ง๋ง ์ค์ ๋ก ๋ฝ๋ ๊ฒฝ์ฐ๋ฅผ ๋์ ํฉ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด 1000 * 1000 * 2
= 2000000 ์ฝ 200๋ง์ผ๋ก ์ค์ด๋ค ์ ์๋ค.
๋์ ํฉ์ ๋ง๋ค๊ธฐ ์ ์ ๋ฐฐ์ด์ ๋์ ๋ถ์ฌ๋๊ณ , ๊ทธ๋๋ก 1 ~ n*2๊น์ง ๋์ ํฉ์ ๊ตฌํด๋์ผ๋ฉด ๋๋ค. ๊ทธ๋ผ ์ํ์ด๋ผ๋ ๋ฌธ์ ์์ด ๋์ ํฉ์ ์ฌ์ฉํ ์ ์๋ค. ํ ๊ฐ์ง ์๋ฅผ ๋ค์ด๋ณด๋ฉด..
3๊ฐ
7 9 11 13 14 21 23 25 27 28
- - -
= 11 (7 2 2)
7 9 11 13 14 21 23 25 27 28 ์์ ๋์ ํฉ์์ ์๋ ๋์ ํฉ์ ๋บ๋ค.
- - - -
-
= 6 (2 2 2)
7 9 11 13 14 21 23 25 27 28
- - - - -
- -
= 5 (2 2 1)
7 9 11 13 14 21 23 25 27 28
- - - - - -
- - -
= 10 (2 1 7)
7 9 11 13 14 21 23 25 27 28
- - - - - - -
- - - -
= 10 (1 7 2) ์ด ๋ค์๋ถํฐ๋ ๊ฐ์ ๊ฒฝ์ฐ์ ์์ด๋ฏ๋ก stop
์ด๋ ๊ฒ ์ ์ ์ฉ๋๋ ๋ชจ์ต์ ์ ์ ์๋ค. index๋ฅผ 1๋ถํฐ ์์ํ๋ ์ด์ ๋ ๋์ ํฉ์ด๋ค๋ณด๋ A[i] += A[i - 1]; ๊ณผ ๊ฐ์ ๋ก์ง์ ์ฌ์ฉํ๋๋ฐ 0๋ถํฐ ์์ํ๋ฉด 0์ ๋ฐ๋ก ์ฒ๋ฆฌํด์ค์ผ ํ๋๊น ์ฐจ๋ผ๋ฆฌ 1๋ถํฐ ์์ํ๋ ๊ฒ์ด๋ค.
์ง๊ธ๊น์ง ์ํ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํ์ ์๋ฃ๊ตฌ์กฐ๋ก ๋ฐ๊พธ๊ณ ๋์ ํฉ์ ๊ตฌํ๋ ๊ฒ๊น์ง ํ๋ค. ์ด์ ํด๋น ๊ฒฝ์ฐ์ ์๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ๋๋ ์ธ๋ฐ ์ด๊ฑด Map์ผ๋ก ์ ์ฅํ์๋ค. ๊ทธ๋ผ ์ด๋ค ์์ ๋ํ ๊ฒฝ์ฐ์ ์ ๊ฐ์๋ฅผ ๋ฐ๋ก๋ฐ๋ก ๊ฐฑ์ ํ ์ ์์ผ๋ ํธ๋ฆฌํ๋ค.
3. ๊ตฌํ ๊ฐ์๋ฅผ ์ด์ฉํด ret ๊ฐ ๋ง๋ค๊ธฐ
์ด์ ๊ตฌํ ๊ฐ์๋ฅผ ์ด์ฉํด ret ๊ฐ์ ๋ง๋ค๋ฉด ๋๋ค.
์๋์ด ์ฌ๋ ค๊ณ ํ๋ ํผ์์ ์กฐ๊ฐ ํฉ์ด 7์ด๋ผ๋ฉด 0 ~ 7๊น์ง ๋ฐ๋ณตํ๋ฉด์ mapA.get(i) * mapB.get(7 - i)๋ก ๋ฐ๋ณตํ๋ฉด์ ret ๊ฐ์ ๊ฐฑ์ ํ๋ฉด ๋๋ค. ๋ง์ฝ, i = 3์ด๋ฉด A ํผ์์์ 3์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์ ๊ฐ์์ B ํผ์์์ 4๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์ ๊ฐ์๋ฅผ ๊ณฑํ๋ฉด A, B ํผ์๋ฅผ ์ด์ฉํด์ ์ดํฉ 7์ ๋ง๋ค ์ ์๋ค.
๋ง์ฝ B ํผ์์์ 4๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉด ์ ์ด์ ์ด ๊ฒฝ์ฐ ํผ์๋ฅผ 7๋ก ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก ๋์ด๊ฐ๋ฉด ๋๋ค. ํ ๊ฐ์ง ์ฃผ์ํ ์ ์ ํ ํผ์์์ ๋ฐ๋ก 7์ ๋ง๋๋ ๊ฒฝ์ฐ์ธ๋ฐ ์ด๋ฌ๋ฉด ์ ๋ก์ง ์ mapA.get(7) * mapB.get(0)์ด ๋์ด๋ฒ๋ฆฌ๋๊น ๋ง๋ค ์ ์๋ ๊ฐ์ด ๋์จ๋ค. ๊ทธ๋์ ๋ง์ง๋ง ๊ฐ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ก ํด์ค์ผํ๋ค.
์ฝ๋
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class Main {
static int ret = 0;
static int[] A;
static int[] B;
static int m, n;
static int pizza;
static Map<Integer, Integer> mpa = new HashMap<>();
static Map<Integer, Integer> mpb = new HashMap<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
pizza = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
m = Integer.parseInt(st.nextToken());
n = Integer.parseInt(st.nextToken());
A = new int[m * 2 + 1];
B = new int[n * 2 + 1];
for (int i = 1; i <= m; i++) A[i] = A[i+m] = Integer.parseInt(br.readLine());
for (int i = 1; i <= n; i++) B[i] = B[i+n] = Integer.parseInt(br.readLine());
for (int i = 1; i <= m * 2; i++) A[i] += A[i - 1];
for (int i = 1; i <= n * 2; i++) B[i] += B[i - 1];
int sum;
for (int interval = 1; interval <= m; interval++) {
for (int start = interval; start <= m + interval - 1; start++) {
sum = A[start] - A[start - interval];
if (!mpa.containsKey(sum)) mpa.put(sum, 1);
else mpa.put(sum, mpa.get(sum) + 1);
if (interval == m) break;
}
}
for (int interval = 1; interval <= n; interval++) {
for (int start = interval; start <= n + interval - 1; start++) {
sum = B[start] - B[start - interval];
if (!mpb.containsKey(sum)) mpb.put(sum, 1);
else mpb.put(sum, mpb.get(sum) + 1);
if (interval == n) break;
}
}
if (mpa.containsKey(pizza))
ret = mpa.get(pizza);
if (mpb.containsKey(pizza))
ret += mpb.get(pizza);
for (int i = 1; i < pizza; i++)
if (mpa.containsKey(i) && mpb.containsKey(pizza - i))
ret += (mpa.get(i) * mpb.get(pizza - i));
System.out.println(ret);
}
}
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
1463 - 1๋ก ๋ง๋ค๊ธฐ (0) | 2024.08.29 |
---|---|
[swea] 1859. ๋ฐฑ๋ง ์ฅ์ ํ๋ก์ ํธ (1) | 2024.08.28 |
17143 - ๋์์ (0) | 2024.08.24 |
17406 - ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 4 [์ฑ๊ณต(๋ฐ๋กํํธ)|01:06:16] (1) | 2024.08.17 |
3190 - ๋ฑ [์ฑ๊ณต(๋ฐ๋กํํธ)|02:14:43] (0) | 2024.08.09 |