Home > Backend Development > πŸ“š[Backend Development] λ¬΄ν•œ Depth λŒ“κΈ€ 쑰회 - λ¬Έμžμ—΄ 기반 경둜 관리, λ§μ…ˆ μ—°μ‚°, μ˜ˆμ™Έ 처리

πŸ“š[Backend Development] λ¬΄ν•œ Depth λŒ“κΈ€ 쑰회 - λ¬Έμžμ—΄ 기반 경둜 관리, λ§μ…ˆ μ—°μ‚°, μ˜ˆμ™Έ 처리
Backend Ddevelopment

β€œπŸ“š[Backend Development] λ¬΄ν•œ Depth λŒ“κΈ€ 쑰회 - λ¬Έμžμ—΄ 기반 경둜 관리, λ§μ…ˆ μ—°μ‚°, μ˜ˆμ™Έ μ²˜λ¦¬β€

βœ…1️⃣ λ¬Έμžμ—΄ 기반 λŒ“κΈ€ 경둜(Path) 관리

  • Path Enumeration λ°©μ‹μ—μ„œ μˆ«μžκ°€ μ•„λ‹Œ λ¬Έμžμ—΄μ„ 기반으둜 λŒ“κΈ€μ˜ 경둜λ₯Ό 관리해야 ν•©λ‹ˆλ‹€.

πŸ“Œ Path λ¬Έμžμ—΄ μ—°μ‚°μ˜ 핡심.

  • λŒ“κΈ€ 경둜λ₯Ό λ¬Έμžμ—΄λ‘œ κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ—, λ§μ…ˆ 연산을 μˆ˜ν–‰ν•  λ•Œ μˆ«μžκ°€ μ•„λ‹Œ λ¬Έμžμ—΄ 기반 연산이 ν•„μš”ν•©λ‹ˆλ‹€.
  • λŒ€μ†Œλ¬Έμž 및 숫자 κ°„μ˜ 관계(0~9 < A~Z < a~z)λ₯Ό μ΄ν•΄ν•˜κ³ , λ¬Έμžμ—΄μ„ μ¦κ°€μ‹œν‚€λŠ” 둜직이 ν•„μš”ν•©λ‹ˆλ‹€.
0~9 < A~Z < a~z
  • μ΄λŸ¬ν•œ μ •λ ¬ κ·œμΉ™μ„ μ΄ν•΄ν•˜λ©΄, λŒ“κΈ€μ˜ 경둜(Path)λ₯Ό μ¦κ°€μ‹œν‚€λŠ” 연산을 μ½”λ“œλ‘œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

βœ…2️⃣ β€œ00000”뢀터 β€œzzzzzβ€κΉŒμ§€ μ¦κ°€ν•˜λŠ” λ¬Έμžμ—΄ μ—°μ‚°

  • Path 값은 β€œ00000”뢀터 μ‹œμž‘ν•˜μ—¬ μ¦κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΄€λ¦¬λ©λ‹ˆλ‹€.

πŸ“Œ λ¬Έμžμ—΄ 기반 μ •λ ¬ 방식.

    1. β€œ00000” β†’ β€œ00001” β†’ … β†’ β€œAAAA9” β†’ β€œAAAAA” β†’ … β†’ β€œzzzzzβ€λ‘œ 증가
    1. λ¬Έμžμ—΄μ˜ λŒ€μ†Œλ¬Έμž μˆœμ„œλ₯Ό ν™œμš©ν•˜μ—¬ μ •λ ¬ (0-9, A-Z, a-z)
    1. λŒ“κΈ€μ΄ 좔가될 λ•Œλ§ˆλ‹€ 이전 λŒ“κΈ€μ˜ κ²½λ‘œμ— 1을 λ”ν•˜μ—¬ μƒˆλ‘œμš΄ 경둜 생성

βœ…3️⃣ λ¬Έμžμ—΄ 기반 λ§μ…ˆ(증가) μ—°μ‚°.

  • Path 값이 λ¬Έμžμ—΄λ‘œ κ΄€λ¦¬λ˜λ―€λ‘œ, μˆ«μžκ°€ μ•„λ‹ˆλΌ λ¬Έμžμ—΄ λ§μ…ˆμ„ μˆ˜ν–‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

πŸ“Œ λ¬Έμžμ—΄ λ§μ…ˆ 방식

    1. 였λ₯Έμͺ½ λ¬ΈμžλΆ€ν„° 1μ”© 증가
    1. carry(올림수)κ°€ 있으면 λ‹€μŒ λ¬Έμžλ„ 증가
    1. β€œzzzzz”에 λ„λ‹¬ν•˜λ©΄ Overflow λ°œμƒ

πŸ“ 예제:

a39zz
+    1
------
a3A00
  • zλ₯Ό λ„˜μ–΄κ°€λ©΄ 0으둜 μ΄ˆκΈ°ν™”λ˜κ³ , μ•žμžλ¦¬ μˆ«μžκ°€ 증가함.
  • carryλ₯Ό λ°˜μ˜ν•˜μ—¬ μž¬κ·€μ μœΌλ‘œ 처리.

βœ…4️⃣ 숫자 기반 λ§μ…ˆ 방식

  • λ¬Έμžμ—΄ 연산이 λ³΅μž‘ν•  수 μžˆμœΌλ―€λ‘œ, 62μ§„μˆ˜ λ³€ν™˜ ν›„ 숫자둜 μ—°μ‚°ν•˜λŠ” 방법도 κ³ λ €ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“Œ 숫자둜 λ³€ν™˜ ν›„ μ—°μ‚°ν•˜λŠ” 방법.

    1. 62μ§„μˆ˜ λ¬Έμžμ—΄μ„ 10μ§„μˆ˜ 숫자둜 λ³€ν™˜
    1. 숫자둜 λ§μ…ˆ μˆ˜ν–‰
    1. λ‹€μ‹œ 62μ§„μˆ˜ λ¬Έμžμ—΄λ‘œ λ³€ν™˜
62μ§„μˆ˜ ("00000" ~ "zzzzz") β†’ 10μ§„μˆ˜ λ³€ν™˜ β†’ +1 μ—°μ‚° β†’ λ‹€μ‹œ 62μ§„μˆ˜ λ³€ν™˜
  • 이 방법을 μ‚¬μš©ν•˜λ©΄ λ¬Έμžμ—΄ 연산보닀 효율적인 λ°©μ‹μœΌλ‘œ Pathλ₯Ό μ¦κ°€μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

βœ…5️⃣ μ˜ˆμ™Έ μΌ€μ΄μŠ€ 처리 - 졜초 λŒ“κΈ€ 생성

  • Pathλ₯Ό 관리할 λ•Œ, 졜쑰 λŒ“κΈ€μ΄ μƒμ„±λ˜λŠ” 경우λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

πŸ“Œ 처리 방법.

    1. λΆ€λͺ¨ λŒ“κΈ€(00a0z)의 ν•˜μœ„ λŒ“κΈ€μ΄ μ—†λŠ” 경우
    1. 첫 번째 ν•˜μœ„ λŒ“κΈ€μ„ 생성해야 함
    1. Path 값은 λΆ€λͺ¨ Path + β€œ00000β€λ‘œ μ„€μ •

πŸ“ 예제:

λΆ€λͺ¨ Path: 00a0z
첫 번째 ν•˜μœ„ λŒ“κΈ€ Path: 00a0z 0000

βœ…6️⃣ λŒ“κΈ€ κ²½λ‘œκ°€ zzzzzκΉŒμ§€ λ„λ‹¬ν•œ 경우.

  • Path 값이 zzzzzκΉŒμ§€ μ¦κ°€ν•˜λ©΄, 더 이상 μƒˆλ‘œμš΄ Pathλ₯Ό 생성할 수 μ—†λŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

πŸ“Œ ν•΄κ²° 방법.

    1. Pathλ₯Ό κ΅¬μ„±ν•˜λŠ” 문자 개수λ₯Ό 증가(5 β†’ 6, 7 …)
    1. 더 넓은 λ²”μœ„μ˜ Path 값을 ν—ˆμš©ν•˜λ„λ‘ κ°œμ„ 
62^5 = 16,132,832 (κΈ°μ‘΄)
62^6 = 998,001,488 (ν™•μž₯ κ°€λŠ₯)
  • Path의 자리 수λ₯Ό 늘리면 더 λ§Žμ€ λŒ“κΈ€μ„ μ €μž₯ν•˜κ³  μ •λ ¬ κ°€λŠ₯ν•©λ‹ˆλ‹€.

βœ…7️⃣ μ΅œμ’… 정리

πŸ“Œ λ¬΄ν•œ Depth λŒ“κΈ€ 정렬을 μœ„ν•΄ κ³ λ €ν•΄μ•Ό ν•  사항

    1. Path 값을 λ¬Έμžμ—΄λ‘œ 관리해야 ν•˜λ―€λ‘œ, λ¬Έμžμ—΄ 기반 λ§μ…ˆ 연산이 ν•„μš”
    1. 숫자둜 λ³€ν™˜ν•˜μ—¬ 62μ§„μˆ˜ 연산을 μˆ˜ν–‰ν•˜λŠ” 방식도 κ°€λŠ₯
    1. 졜초 λŒ“κΈ€ 생성 μ‹œ κΈ°λ³Έ Path(β€œ00000”)을 μΆ”κ°€
    1. Pathκ°€ 가득 μ°¬ 경우, 자리 수λ₯Ό 늘렀 더 λ§Žμ€ 경둜λ₯Ό μ €μž₯ κ°€λŠ₯