โ๐[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โ๋ถํฐ ์์ํ์ฌ ์ฆ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
๐ ๋ฌธ์์ด ๊ธฐ๋ฐ ์ ๋ ฌ ๋ฐฉ์.
-
- โ00000โ โ โ00001โ โ โฆ โ โAAAA9โ โ โAAAAAโ โ โฆ โ โzzzzzโ๋ก ์ฆ๊ฐ
-
- ๋ฌธ์์ด์ ๋์๋ฌธ์ ์์๋ฅผ ํ์ฉํ์ฌ ์ ๋ ฌ (0-9, A-Z, a-z)
-
- ๋๊ธ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ์ด์ ๋๊ธ์ ๊ฒฝ๋ก์ 1์ ๋ํ์ฌ ์๋ก์ด ๊ฒฝ๋ก ์์ฑ
โ 3๏ธโฃ ๋ฌธ์์ด ๊ธฐ๋ฐ ๋ง์ (์ฆ๊ฐ) ์ฐ์ฐ.
- Path ๊ฐ์ด ๋ฌธ์์ด๋ก ๊ด๋ฆฌ๋๋ฏ๋ก, ์ซ์๊ฐ ์๋๋ผ ๋ฌธ์์ด ๋ง์ ์ ์ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํฉ๋๋ค.
๐ ๋ฌธ์์ด ๋ง์ ๋ฐฉ์
-
- ์ค๋ฅธ์ชฝ ๋ฌธ์๋ถํฐ 1์ฉ ์ฆ๊ฐ
-
- carry(์ฌ๋ฆผ์)๊ฐ ์์ผ๋ฉด ๋ค์ ๋ฌธ์๋ ์ฆ๊ฐ
-
- โzzzzzโ์ ๋๋ฌํ๋ฉด Overflow ๋ฐ์
๐ ์์ :
a39zz
+ 1
------
a3A00
- z๋ฅผ ๋์ด๊ฐ๋ฉด 0์ผ๋ก ์ด๊ธฐํ๋๊ณ , ์์๋ฆฌ ์ซ์๊ฐ ์ฆ๊ฐํจ.
- carry๋ฅผ ๋ฐ์ํ์ฌ ์ฌ๊ท์ ์ผ๋ก ์ฒ๋ฆฌ.
โ 4๏ธโฃ ์ซ์ ๊ธฐ๋ฐ ๋ง์ ๋ฐฉ์
- ๋ฌธ์์ด ์ฐ์ฐ์ด ๋ณต์กํ ์ ์์ผ๋ฏ๋ก, 62์ง์ ๋ณํ ํ ์ซ์๋ก ์ฐ์ฐํ๋ ๋ฐฉ๋ฒ๋ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
๐ ์ซ์๋ก ๋ณํ ํ ์ฐ์ฐํ๋ ๋ฐฉ๋ฒ.
-
- 62์ง์ ๋ฌธ์์ด์ 10์ง์ ์ซ์๋ก ๋ณํ
-
- ์ซ์๋ก ๋ง์ ์ํ
-
- ๋ค์ 62์ง์ ๋ฌธ์์ด๋ก ๋ณํ
62์ง์ ("00000" ~ "zzzzz") โ 10์ง์ ๋ณํ โ +1 ์ฐ์ฐ โ ๋ค์ 62์ง์ ๋ณํ
- ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด ์ฐ์ฐ๋ณด๋ค ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก Path๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค.
โ 5๏ธโฃ ์์ธ ์ผ์ด์ค ์ฒ๋ฆฌ - ์ต์ด ๋๊ธ ์์ฑ
- Path๋ฅผ ๊ด๋ฆฌํ ๋, ์ต์กฐ ๋๊ธ์ด ์์ฑ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
๐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ.
-
- ๋ถ๋ชจ ๋๊ธ(00a0z)์ ํ์ ๋๊ธ์ด ์๋ ๊ฒฝ์ฐ
-
- ์ฒซ ๋ฒ์งธ ํ์ ๋๊ธ์ ์์ฑํด์ผ ํจ
-
- Path ๊ฐ์ ๋ถ๋ชจ Path + โ00000โ๋ก ์ค์
๐ ์์ :
๋ถ๋ชจ Path: 00a0z
์ฒซ ๋ฒ์งธ ํ์ ๋๊ธ Path: 00a0z 0000
โ 6๏ธโฃ ๋๊ธ ๊ฒฝ๋ก๊ฐ zzzzz๊น์ง ๋๋ฌํ ๊ฒฝ์ฐ.
- Path ๊ฐ์ด zzzzz๊น์ง ์ฆ๊ฐํ๋ฉด, ๋ ์ด์ ์๋ก์ด Path๋ฅผ ์์ฑํ ์ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๐ ํด๊ฒฐ ๋ฐฉ๋ฒ.
-
- Path๋ฅผ ๊ตฌ์ฑํ๋ ๋ฌธ์ ๊ฐ์๋ฅผ ์ฆ๊ฐ(5 โ 6, 7 โฆ)
-
- ๋ ๋์ ๋ฒ์์ Path ๊ฐ์ ํ์ฉํ๋๋ก ๊ฐ์
62^5 = 16,132,832 (๊ธฐ์กด)
62^6 = 998,001,488 (ํ์ฅ ๊ฐ๋ฅ)
- Path์ ์๋ฆฌ ์๋ฅผ ๋๋ฆฌ๋ฉด ๋ ๋ง์ ๋๊ธ์ ์ ์ฅํ๊ณ ์ ๋ ฌ ๊ฐ๋ฅํฉ๋๋ค.
โ 7๏ธโฃ ์ต์ข ์ ๋ฆฌ
๐ ๋ฌดํ Depth ๋๊ธ ์ ๋ ฌ์ ์ํด ๊ณ ๋ คํด์ผ ํ ์ฌํญ
-
- Path ๊ฐ์ ๋ฌธ์์ด๋ก ๊ด๋ฆฌํด์ผ ํ๋ฏ๋ก, ๋ฌธ์์ด ๊ธฐ๋ฐ ๋ง์ ์ฐ์ฐ์ด ํ์
-
- ์ซ์๋ก ๋ณํํ์ฌ 62์ง์ ์ฐ์ฐ์ ์ํํ๋ ๋ฐฉ์๋ ๊ฐ๋ฅ
-
- ์ต์ด ๋๊ธ ์์ฑ ์ ๊ธฐ๋ณธ Path(โ00000โ)์ ์ถ๊ฐ
-
- Path๊ฐ ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ, ์๋ฆฌ ์๋ฅผ ๋๋ ค ๋ ๋ง์ ๊ฒฝ๋ก๋ฅผ ์ ์ฅ ๊ฐ๋ฅ