Two Pointers(ํฌํฌ์ธํฐ) — “์์ชฝ์์ ์ขํ๊ฐ๋ฉฐ O(n)์ผ๋ก ๋๋ด๋ ๊ธฐ์ ”

์ฝํ ์์ ํฌํฌ์ธํฐ๋ ์์ฃผ ๋ฑ์ฅํ์ง๋ง, ํต์ฌ์ ๋จ์ํด์.
ํฌ์ธํฐ(์ธ๋ฑ์ค) 2๊ฐ๋ฅผ ์ก๊ณ , ๋์ ํ ๋ฐฉํฅ์ผ๋ก๋ง ์์ง์ด๋ฉด์ ์ ๋ต์ ๋ง๋ ๋ค.
๊ทธ๋์ ๋ณดํต **O(n²)**๋ก ํ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ **O(n)**์ผ๋ก ์ค์ฌ์ค๋๋ค.
ํฌํฌ์ธํฐ๊ฐ “์ ๋จนํ๋” ์๊ฐ์ ๋ฑ ํ๋์ ๊ณตํต์ ์ด ์์ด์.
โ
ํ ๋ฒ ์์ง์ธ ํฌ์ธํฐ๊ฐ ๋ค์ ๋ค๋ก ๋์๊ฐ ํ์๊ฐ ์๋๋ก
์กฐ๊ฑด ํ๋จ์ด **๋จ์กฐ(monotonic)**์ฌ์ผ ํ๋ค๋ ์ ์
๋๋ค.
1) ํฌํฌ์ธํฐ๊ฐ ์ ๋จนํ๋ ๋ํ ํจํด 2๊ฐ์ง
ํจํด A) ์ ๋ ฌ + ์๋ ์ขํ๊ธฐ (์ง ๋ง์ถ๊ธฐ / ์ต์ ํ์)
ํค์๋
- “์ต๋ 2๊ฐ์ฉ ๋ฌถ๊ธฐ”
- “๋ ์์ ํฉ์ด limit ์ดํ”
- “์ต์ ๋ณดํธ ์ / ์ต์ ๊ทธ๋ฃน ์ / ์ต๋ ๋งค์นญ”
- ์ ๋ ฌํ๋ฉด ๊ฐ๋ฅํ์ง/๋ถ๊ฐ๋ฅํ์ง๊ฐ ๋จ์กฐ๊ฐ ๋จ
์ง๊ด
- “๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ์ฌ๋”์ ์ ํ์ง๊ฐ ๊ฑฐ์ ์์ → ๋จผ์ ์ฒ๋ฆฌํด์ผ ํจ
- ๋ฌด๊ฑฐ์ด ์ฌ๋์ ํ์ธ ๋, ๊ฐ์ด ํ์ธ ์ ์๋ค๋ฉด ๊ฐ์ฅ ๊ฐ๋ฒผ์ด ์ฌ๋์ ๋ถ์ด๋ ๊ฒ ์ต์
- ๊ฐ๋ฒผ์ด ์ฌ๋๊ณผ๋ ๊ฐ์ด ๋ชป ํ๋ฉด → ๋ฌด๊ฑฐ์ด ์ฌ๋์ ๋๊ตฌ์๋ ๋ชป ํ → ํผ์ ๋ณด๋ด๋ ๊ฒ ์ต์
2) ๋ํ ๋ฌธ์ : ๊ตฌ๋ช ๋ณดํธ(์ต์ ๋ณดํธ ์)
๋ฌธ์ ์์ฝ
- ๋ณดํธ 1๋์ ์ต๋ 2๋ช
- ๋ฌด๊ฒ ์ ํ(limit) ์ด๊ณผํ๋ฉด ๊ฐ์ด ๋ชป ํ
- ๋ชจ๋ ๊ตฌ์ถํ ๋ ํ์ํ ์ต์ ๋ณดํธ ์
ํ์ด ์ ๋ต(๊ทธ๋ฆฌ๋ + ํฌํฌ์ธํฐ)
- ๋ชธ๋ฌด๊ฒ๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
- L=๊ฐ๋ฒผ์ด ์ชฝ, R=๋ฌด๊ฑฐ์ด ์ชฝ ํฌ์ธํฐ
- ๋งค๋ฒ R(๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ์ฌ๋)์ ๋ณดํธ 1๋ ํ์
- people[L] + people[R] <= limit์ด๋ฉด ๊ฐ์ด ํ์ฐ๊ณ L++
- R--, ๋ณดํธ ์ +1
3) ์ ๋ต ์ฝ๋ (Python)
4) ์์๋ก ์ดํดํ๊ธฐ
people = [70, 50, 80, 50], limit = 100
์ ๋ ฌ → [50, 50, 70, 80]
- L=50, R=80 → 130 (๋ถ๊ฐ) → 80 ํผ์ (boats=1), R--
- L=50, R=70 → 120 (๋ถ๊ฐ) → 70 ํผ์ (boats=2), R--
- L=50, R=50 → 100 (๊ฐ๋ฅ) → ๋์ด ๊ฐ์ด (boats=3)
์ ๋ต = 3
5) ์ ์ด๊ฒ ์ต์ ์ธ๊ฐ? (ํ ๋ฌธ์ฅ ์ฆ๋ช ๋๋)
๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ์ฌ๋์ ๋ฆ๊ฒ ์ฒ๋ฆฌํ ์๋ก ํจ๊ป ํ ์ ์๋ ํ๋ณด๊ฐ ๋ ์ค์ด๋ ๋ค.
๊ทธ๋ฌ๋ ๋ฌด๊ฑฐ์ด ์ฌ๋๋ถํฐ ํ์ฐ๊ณ , ๊ฐ์ด ํ์ธ ์ ์๋ค๋ฉด ๊ฐ์ฅ ๊ฐ๋ฒผ์ด ์ฌ๋์ ๋ถ์ด๋ ๊ฒ์ด ํญ์ ์ํด๊ฐ ์๋ค.
- ๋ฌด๊ฑฐ์ด ์ฌ๋์ ๊ฐ๋ฒผ์ด ์ฌ๋๊ณผ๋ ๋ชป ๋ฌถ๋๋ค๋ฉด → ๊ทธ ๋ฌด๊ฑฐ์ด ์ฌ๋์ ๋๊ตฌ์๋ ๋ชป ๋ฌถ์
- ๋ฌถ์ ์ ์๋ค๋ฉด → “๊ฐ๋ฒผ์ด ์ฌ๋”์ ์ฐ๋ ๊ฒ์ด ๋ค๋ฅธ ์กฐํฉ์ ๋ง์น์ง ์์
6) ํฌํฌ์ธํฐ๋ฅผ ๋ ์ฌ๋ฆฌ๋ ์ฒดํฌ๋ฆฌ์คํธ(์๊ธฐ์ฉ)
๋ค์ ์ค ํ๋๋ผ๋ ๋ณด์ด๋ฉด ํฌํฌ์ธํฐ๋ฅผ ์์ฌํด์.
- โ ์ ๋ ฌ ํ “์๋์์ ์ขํ๋ฉฐ ์ง์ ์ง์ด ์กฐ๊ฑด ๋ง์กฑ”
- โ “ํ ๋ฒ์ ์ค์บ์ผ๋ก ๋๋ผ ์ ์๊ฒ ํฌ์ธํฐ๊ฐ ๋ค๋ก ๊ฐ ํ์ ์์”
- โ “์ต๋/์ต์ ๋งค์นญ, ์ต์ ํ์” ๊ฐ์ ์ต์ ํ + ์กฐ๊ฑด์ด ๋จ์กฐ
7) ๋ค: (์ฃผ์) ํฌํฌ์ธํฐ๊ฐ ์ ์ ๋๋ ์ผ์ด์ค
- ์ฐ์ ๊ตฌ๊ฐ ํฉ ๋ฌธ์ ์์ ์์๊ฐ ์์ด๋ฉด ๋จ์กฐ๊ฐ ๊นจ์ง ์ ์์ด์.
(์ค๋ฅธ์ชฝ์ ๋๋ ธ๋๋ฐ ํฉ์ด ์ค์ด๋ค ์๋ ์์ด์, “์ขํ๊ฐ๊ธฐ”๊ฐ ๋ณด์ฅ๋์ง ์์)
'๐ฉโ๐ปDeveloper ๐ก > ๐คนโโ๏ธAlgorithm & Coding Test๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| MLA 2์ฃผ์ปท ใฑใฑ! (0) | 2026.01.26 |
|---|---|
| ํ์ด์ฌ format() ํ ๋ฐฉ์ ๋๋ด๊ธฐ: ์๋ฆฟ์(0 padding) + ์ด์ง์ ๋ณํ + ์ค์ ์์(๋น๋ฐ์ง๋) (1) | 2026.01.19 |
| ์ต์๊ณต๋ฐฐ์(LCM) ํ ๋ฐฉ์ ๋๋ด๊ธฐ: lcm = a*b // gcd(a,b) + ๋์ (0) | 2026.01.11 |
| ์ผ์ฑ ์ฝ๋ฉํ ์คํธ ํฉ๊ฒฉ์ ์ ๋ฆฌ (ADV / PRO) (1) | 2026.01.09 |
