**๐ ์ฐธ๊ณ ๋ฌธ์ ** โ [<https://www.acmicpc.net/problem/7453>](<https://www.acmicpc.net/problem/7453>) // ํด๋ฆญ ์ ์ด๋
- Meet-in-the-middle (MITM)
- ํฐ ํ์์ ๋ฐ์ผ๋ก ์ชผ๊ฐ์ ๊ฐ๊ฐ์ ๋ฏธ๋ฆฌ ๊ณ์ฐํด๋๊ณ , ๋ ๊ฒฐ๊ณผ๋ฅผ ํฉ์ณ ์ ๋ต์ ๋ง๋๋ ๊ธฐ๋ฒ
- ์ผ๋ฐ์ ์ผ๋ก โํฉโ ํํ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋จ
A + B + C + D = K โ (A+B) + (C+D) = K
- K์ค ๋ฃจํ โ (K/2) ์ค ๋ฃจํ ๋ก ๋ฎ์ถ๋ ๋ฐ์
๐ฎ ์ ์
๊ฒฌ์ ๋ฒ๋ฆฌ์
- K๊ฐ ํญ์ ํฉ์ ๊ทธ๋๋ก K์ค ๋ฃจํ๋ก ๋๋ฆฌ๋ฉด ์๊ฐ ์ด๊ณผ ๋ฐ์ ํ๋ฅ ๋์
- N์ด ์์ฒ์ด๋ฉด 3์ค ๋ฃจํ๋ถํฐ ์ํ
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, โ2๊ฐ์ฉ ๋ฌถ์ด์ ํฉ ๋ฐฐ์ด ๋ง๋ค๊ธฐโ ๋ฐฉ์ ์ฌ์ฉ
- ์ดํ ํฌํฌ์ธํฐ๋ฅผ ํตํด ๋ฌธ์ ํ์ด ์งํ
๐ญ ์ด๋ป๊ฒ ๋ ์ฌ๋ฆด๊น
- ํธ๋ฆฌ๊ฑฐ
- ํญ์ด 4๊ฐ:
A[a] + B[b] + C[c] + D[d] = 0
- N์ด 4000: 4์ค ๋ฃจํ ๋ถ๊ฐ๋ฅ
- ์กด์ฌ ์ฌ๋ถ๊ฐ ์๋๋ผ ๊ฐ์ ์นด์ดํ
- ํ ์ค๋ก ๋ณํ
A + B + C + D = 0 == (A + B) = -(C + D)
- ์ด๋ ๊ฒ ํ๋ฉด, AB ํฉ๋ค๊ณผ CD ํฉ๋ค ์ฌ์ด์์ โ์๋ก ๋ณด์์ธ ๊ฐ์ด ๋ช ๊ฐ์ธ๊ฐโ ๋ก ๊ด์ ๋ณ๊ฒฝ
โ๏ธ ์๊ฐ ๋ณต์ก๋ (4SUM ๊ธฐ์ค)
M = Nยฒ ๋ก ์ค์
- ์๊ฐ๋ณต์ก๋: O(M ร log M)
- ์ ๋ ฌ: O(M ร log M) โ ์ง๋ฐฐ์
- ํฉ ๋ฐฐ์ด ์์ฑ: O(M)
๐ kSUM ํ์ด ๋ฐฉ๋ฒ
- kSUM ์ผ๋ฐํ ์์ด๋์ด
x1 + x2 + ... + xk = K ์ผ ๋, ๋ฐ์ผ๋ก ๋ถํ
- ์ผ์ชฝ ๊ทธ๋ฃน ํฌ๊ธฐ
p , ์ค๋ฅธ์ชฝ ํฌ๊ธฐ k - p
sumLeft = K - sumRight ํํ๋ก ๋งค์นญ