โจ Algorithm/๐๐ฆบ ๋ฐํน๋ ๊ฐ๋ 10 [0x0A] DFS DFS depth first search ๋ค์ฐจ์ ๋ฐฐ์ด์์ ๊ฐ ์นธ์ ๋ฐฉ๋ฌธํ ๋ ๊น์ด๋ฅผ ์ฐ์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ ์๊ณ ๋ฆฌ์ฆ ์์ ๋ชจ๋ ์นธ์ด ์คํ์ 1๋ฒ์ฉ ๋ค์ด๊ฐ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ ์นธ์ด N๊ฐ์ผ ๋ O(N) ์์ํ๋ ์นธ์ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธํ๋ ํ์๋ฅผ ๋จ๊น ์คํ์์ ์์๋ฅผ ๊บผ๋ด์ ๊ทธ ์นธ๊ณผ ์ํ์ข์ฐ๋ก ์ธ์ ํ ์นธ์ ๋ํด (3)์ ์งํ ํด๋น ์นธ์ ์ด์ ์ ๋ฐฉ๋ฌธํ๋ค๋ฉด ์๋ฌด ๊ฒ๋ ํ์ง ์๊ณ , ์ฒ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ค๋ฉด ๋ฐฉ๋ฌธํ๋ค๋ ํ์๋ฅผ ๋จ๊ธฐ๊ณ ํด๋น ์นธ์ ์คํ์ ์ฝ์ ์คํ์ด ๋น ๋๊น์ง (2)๋ฅผ ๋ฐ๋ณต #include using namespace std; #define X first #define Y second // pair์์ first, second๋ฅผ ์ค์ฌ์ ์ฐ๊ธฐ ์ํด์ ์ฌ์ฉ int board[502][502] = { ... }; // 1.. 2023. 6. 26. [0x09] BFS BFS breadth first search ๋ค์ฐจ์ ๋ฐฐ์ด์์ ๊ฐ ์นธ์ ๋ฐฉ๋ฌธํ ๋ ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ ์๊ณ ๋ฆฌ์ฆ ๊ณผ์ ๋ชจ๋ ์นธ์ด ํ์ 1๋ฒ์ฉ ๋ค์ด๊ฐ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ ์นธ์ด N๊ฐ์ผ ๋ O(N) ์์ํ๋ ์นธ์ ํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธํ๋ค๋ ํ์ ๋จ๊ธฐ๊ธฐ ํ์์ ์์๋ฅผ ๊บผ๋ด์ด ๊ทธ ์นธ์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ์นธ์ ๋ํด (3)์ ์งํ ํด๋น ์นธ์ ์ด์ ์ ๋ฐฉ๋ฌธํ๋ค๋ฉด, ์๋ฌด ๊ฒ๋ ํ์ง ์๊ณ , ์ฒ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ค๋ฉด ๋ฐฉ๋ฌธํ๋ค๋ ํ์๋ฅผ ๋จ๊ธฐ๊ณ ํด๋น ์นธ์ ํ์ ์ฝ์ ํ๊ฐ ๋น ๋๊น์ง (2)๋ฅผ ๋ฐ๋ณต // x๊ฐ ํ, y๊ฐ ์ด #include #include using namespace std; #define X first #define Y second // pair์์ first, second๋ฅผ ์ค์ฌ์ ์ฐ๊ธฐ ์ํด์ ์ฌ์ฉ int board[502.. 2023. 6. 26. [0x08] ์คํ์ ํ์ฉ(์์์ ๊ดํธ ์) ์์์ ๊ดํธ ์ ๊ดํธ์์ด ์ฌ๋ฐ๋ฅธ์ง ์ฒดํฌ ๊ด์ฐฐ ๊ดํธ 1์ข ๋ฅ ๊ดํธ 2์ข ๋ฅ → ์ฐ์๋ ๊ดํธ ์ญ์ ๋ ๊ฐ๋ฅ ํด๊ฒฐ ๋ฐฉ๋ฒ ๋ฌธ์์ด์ ์์์๋ถํฐ ์ฝ์ด๋๊ฐ ๋, ๋ซ๋ ๊ดํธ๋ ๋จ์์๋ ๊ดํธ ์ค์์ ๊ฐ์ฅ ์ต๊ทผ์ ๋ค์ด์จ ์ฌ๋ ๊ดํธ์ ์ง์ ์ง์ด ์์ ๋ฒ๋ฆฌ๋ ๋ช ๋ น์ด๋ผ๊ณ ์๊ฐํด๋ ๋๋ค 2023. 6. 26. [0x07] ๋ฑ ์ ์์ ์ฑ์ง ์ ์ double-ended queue ์์ชฝ ๋์์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์ ๋ถ ๊ฐ๋ฅํ ์๋ฃ ๊ตฌ์กฐ ์ฑ์ง ์์์ ์ถ๊ฐ์ ์ ๊ฑฐ : O(1) ์ ์ผ ์/๋ค์ ์์ ํ์ธ : O(1) ์ ์ผ ์/๋ค์ด ์๋ ๋๋จธ์ง ์์๋ค์ ํ์ธ/๋ณ๊ฒฝ์ด ์์น์ ์ผ๋ก ๋ถ๊ฐ๋ฅ ์ธ๋ฑ์ค๋ก ์์ ์ ๊ทผ ๊ฐ๋ฅ ๊ธฐ๋ฅ๊ณผ ๊ตฌํ const int MAX = 1e7; int data[2*MAX + 1]; int head = MAX, tail = MAX; // ์์ ์ง์ ์ ๋ฐฐ์ด์ ์ค๊ฐ์ผ๋ก : ์๋ค๋ก ํ์ฅ // head : ์์. tail : ๋ค์์ ๋ค์ด๊ฐ ์์์ ์๋ฆฌ void push_front(int x) data[--head] = x; void push_back(int x) data[tail++] = x; void pop_front() head++; v.. 2023. 6. 26. ์ด์ 1 2 3 ๋ค์