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๊ฐ€ ๊ฐ€๋“ ์ฐฌ ๊ฒฝ์šฐ, ์ž๋ฆฌ ์ˆ˜๋ฅผ ๋Š˜๋ ค ๋” ๋งŽ์€ ๊ฒฝ๋กœ๋ฅผ ์ €์žฅ ๊ฐ€๋Šฅ