Two Pointer

투 포인터 μ•Œκ³ λ¦¬μ¦˜μ€ 두 개의 포인터λ₯Ό μ‚¬μš©ν•΄ μ›ν•˜λŠ” 연속합을 μ°Ύμ•„λ‚Έλ‹€.

ν•˜λ‚˜μ˜ ν¬μΈν„°λŠ” μ‹œμž‘μ , λ‹€λ₯Έ ν•˜λ‚˜μ˜ ν¬μΈν„°λŠ” 끝점을 λ‚˜νƒ€λ‚Έλ‹€. μ‹œμž‘μ λΆ€ν„° λμ κΉŒμ§€μ˜ 합이 μ›ν•˜λŠ” 연속합 S에 ν•΄λ‹Ήν•œλ‹€λ©΄ μΉ΄μš΄νŠΈν•œλ‹€. 투 포인터 μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μŒ 과정을 κ±°μΉœλ‹€.

  1. μ‹œμž‘μ κ³Ό 끝점을 λ°°μ—΄μ˜ λ§¨μ•žμ˜ 인덱슀둜 λ‚˜νƒ€λ‚Έλ‹€.

  2. 연속합을 S와 λΉ„κ΅ν•œλ‹€.

    1. 연속합이 S와 κ°™λ‹€λ©΄, μΉ΄μš΄νŠΈν•œλ‹€.

    2. 연속합이 S보닀 μž‘λ‹€λ©΄, 끝점을 μ¦κ°€μ‹œν‚¨λ‹€.

    3. 연속합이 S보닀 크닀면, μ‹œμž‘μ μ„ μ¦κ°€μ‹œν‚¨λ‹€.

  3. μ‹œμž‘μ μ΄ λ²”μœ„ 끝에 도달할 λ•Œ κΉŒμ§€ 2번 과정을 λ°˜λ³΅ν•œλ‹€.

투 포인터 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  각 인덱슀 λ³„λ‘œ λ°˜λ³΅ν•΄μ„œ νƒμƒ‰ν•˜λŠ” 경우 O(N2)O(N^2) μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

ν•˜μ§€λ§Œ 투 포인터 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λ©΄, 각 ν¬μΈν„°λŠ” 총 N번 μ¦κ°€λ˜λ―€λ‘œ O(N)O(N) μ‹œκ°„λ³΅μž‘λ„λ‘œ μˆ˜ν–‰ν•  수 μžˆλ‹€.

Last updated