Algorithm
-
[Algorithm] ์ฌ๋ผ์ด๋ฉ ์๋์ฐAlgorithm 2023. 5. 9. 09:14
์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋? ๊ณ ์ ๋ ๊ธธ์ด์ 2๊ฐ์ ํฌ์ธํฐ (์ปค์)๋ฅผ ๊ฐ์ด ์์ง์ด๋ฉด์ O(N)์ ๋ฐฐ์ด์ ํ์ํ๋ ํ ํฌ๋ N๊ฐ์ ์์๋ฅผ ๊ฐ๋ ๋ฐฐ์ด์ด ์๊ณ , W์ ๋์ด๋ฅผ ๊ฐ๋ ์ฐฝ๋ฌธ์ด ์๋ค๊ณ ๊ฐ์ ํ์. (N, W๋ ๊ณ ์ ๋ ์์) ์ฐฝ๋ฌธ์ ์ผ์ชฝ๋ถํฐ ์์ํด์ ํ ์นธ์ฉ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์์ผ์ผ ํ๋ค. ์ด๋์ํฌ ๋๋ง๋ค ์ฐฝ๋ฌธ ์์์์ ์ ๋ณด ์ ์ถ (ex. ํฉ)์ด ํ์ํ๋ค. ์๋ ์์๋ ์์์ ๊ฐ์๊ฐ 10๊ฐ์ด๋ฉด์ ์๋์ฐ ํฌ๊ธฐ๊ฐ 3์ผ ๋์ด๋ค. ๋ฌธ์ ์์ ๋๋๊ณ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ผ๊ณ ์ธ๊ธํ ๋๋ ์์ง๋ง, ๋ช๋ช ๋ฌธ์ ๋ค์ ์ธ๊ธ ์์ด ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ํ ํฌ๋์ ์จ์ผํ ๋๊ฐ ์๋ค. ๐ก ์ฌ๋ผ์ด๋ฉ ์๋์ฐ์ ๊ธฐ๋ณธ ์์ด๋์ด ์๋์ฐ๋ฅผ ํ ์นธ ์ฎ๊ธฐ๋ฉด (W-1)์นธ์ ๊ฒน์น๋ค. ์ด์ ์ ๋ด๊ฐ ๊ตฌํด์ผ ํ๋ ์ฐฝ๋ฌธ์ ํํ์ ๋ค์ ์ํ ์ฌ์ด์์ ์ค๋ณต๋ ์ ๋ณด๊ฐ W-1๊ฐ ์์ผ๋ฏ๋ก ..
-
[Algorithm] ์ฌ๊ทAlgorithm 2023. 5. 5. 23:54
์ฌ๊ท๋? ํ๋์ ํจ์์์ ์๊ธฐ ์์ ์ ๋ค์ ํธ์ถํด์ ์์ ์ ์ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. int func1(int n) { if (n == 0) return 0; return n + func1(n - 1); } ์ฌ๊ท๋ก ์ด๋ค ๋ฌธ์ ๋ฅผ ์์ ํ์์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ํด ํ์ํ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค! (์ถ์ฒ: ์๊ท ์ด) ์์ ํ์์ ์กด์ฌํ๋ ๋ชจ๋ ๋ต์ ํ๋์ฉ ๊ฒ์ฌํ๋ฏ๋ก, ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ฐ๋ฅํ ๋ต์ ์์ ์ ํํ ๋น๋กํ๋ค. ์ต๋ ํฌ๊ธฐ์ ์ ๋ ฅ์ ๊ฐ์ ํ์ ๋ ๋ต์ ๊ฐ์๋ฅผ ๊ณ์ฐํ๊ณ ์ด๋ค์ ๋ชจ๋ ์ ํ ์๊ฐ ์์ ์์ฑํ ์ ์์ ์ง๋ฅผ ๊ฐ๋ ํ๋ค. ๊ฐ๋ฅํ ๋ชจ๋ ๋ต์ ํ๋ณด๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ์ฌ๋ฌ ๊ฐ์ ์ ํ์ผ๋ก ๋๋๋ค. ๊ฐ ์ ํ์ ๋ต์ ํ๋ณด๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ํ ์กฐ๊ฐ์ด ๋๋ค. ๊ทธ์ค ํ๋์ ์กฐ๊ฐ์ ์ ํํด ๋ต์ ์ผ๋ถ๋ฅผ ๋ง๋ค๊ณ , ๋๋จธ์ง ๋ต์ ์ฌ๊ท ํธ์ถ์ ..
-
[Algorithm] ๋์ ํฉAlgorithm 2023. 5. 4. 15:17
๋ง์ฝ ๋ฐฐ์ด [1, 2, 3, 4, 5, 6]์์ ์ธ๋ฑ์ค 3๋ฒ์งธ ์์ ~ 5๋ฒ์งธ ์์๊น์ง์ ํฉ์ ๊ตฌํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. 1. ์์ ํ์์ผ๋ก for ๋ฌธ ๋๋ฆฌ๊ธฐ ๋ฐฐ์ด์ ํฌํจ๋ ์์์ ์๊ฐ N๊ฐ์ผ ๋์ ์๊ฐ ๋ณต์ก๋๋ O(N)์ด๋ค. int answer = 0; for (int i = 3; i < 6; i++) { answer += arr[i]; } 2. psum ์ฌ์ฉํ๊ธฐ psum์ ์ฌ์ฉํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ฅผ O(1)๋ก ์ค์ผ ์ ์๋ค. psum์ ์๋ณธ ๋ฐฐ์ด์ ์์๋ค์ ๋์ ํฉ์ ๊ตฌํ ๋ฐฐ์ด์ด๋ค. i = 0์ผ ๋, psum[i] = arr[i]์ผ๋ก, psum[0] = arr[0]์ด๋ค. i = 1์ผ ๋์๋ psum[1] = arr[0] + arr[1] = psum[0] + arr[1]์ด๊ณ , i = 2..
-
[Algorithm] ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ (Two Pointer Algorithm)Algorithm 2023. 5. 2. 01:57
ํฌ ํฌ์ธํฐ ๊ธฐ๋ฒ์ด๋?2๊ฐ์ ํฌ์ธํฐ๋ฅผ ๋ง๋ค์ด์ ๊ฐ๊ฐ์ด ๊ฐ๋ฆฌํค๋ ์์์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ์ฌ ์๊ตฌํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆO(N^2)๋ฅผ O(N)์ผ๋ก ์ค์ผ ์ ์๋ค.๋๋ค์๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ์ฌ์ฉํ๋ค. ์ ๋ ฌ๋ ๋ฐฐ์ด์์ O(N^2) ํ์ ์ค ํ์ ์๋ ์ฐ์ฐ์ ๋ฒ๋ ค์ O(N)์ผ๋ก ์ค์ธ๋ค.ํฌ์ธํฐ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ์์ ์ ๋ํ ์์๋ค์ ๋ค์ํ๊ฒ ์ ํด์ผ ํ๋ค.ํฌ ํฌ์ธํฐ ๋ํ ์ ํํฌ์ธํฐ 2๊ฐ๊ฐ ์๋์์ ๋ฐ๋๋ก ์งํํด ๋์๊ฐ๋ ๋ฐฉ์ํฌ์ธํฐ 2๊ฐ๊ฐ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์งํํด ๋์๊ฐ๋ ๋ฐฉ์ํฌ์ธํฐ ํ๋๋ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ์งํํ๊ณ , ๋ค๋ฅธ ํฌ์ธํฐ๋ ์์ชฝ์ผ๋ก ์ด๋ํ๋ ๊ฒํฌ ํฌ์ธํฐ ๋์ ์๋ฆฌ10๊ฐ์ ์๋ก ๋ค๋ฅธ ์์ ์ ์๋ก ์ ๋ ฌ๋ ์์ด์์, ๋ ์ (i, j)์ ํฉ์ด 13์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ์์ค. (1 ≤ i ๋ง์ฝ ์ ๋ฌธ์ ๋ฅผ ์์ ํ์์ผ..
-
[Algorithm] ๋ฐฑ์ค 2003 ์๋ค์ ํฉ 2 (C++)Algorithm 2023. 5. 1. 19:53
2003๋ฒ: ์๋ค์ ํฉ 2 ์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ A[1], A[2], …, A[N]์ด ๊ณต๋ฐฑ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ A[x]๋ 30,000์ ๋์ง ์๋ ์์ฐ์์ด๋ค. www.acmicpc.net ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ ๋ ํฌ์ธํฐ ๋ฌธ์ ํ์ด ํฌํฌ์ธํฐ๋ฅผ ํ์ฉํ๋ ๋ฌธ์ 2๊ฐ์ ํฌ์ธํฐ๊ฐ ๋์์ ๊ฐ์ ์์น์์ ์ถ๋ฐํ๋ ๋ฌธ์ ๋ค. ์์ด์ i๋ฒ์งธ ์๋ถํฐ j๋ฒ์งธ ์๊น์ง์ ํฉ์ด M์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ฉด ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ 2๊ฐ์ ํฌ์ธํฐ๋ฅผ ํ์ฉํ๊ณ , 2๊ฐ์ ํฌ์ธํฐ๊ฐ ๊ฐ์ ์์น (0๋ฒ์งธ ์ธ๋ฑ์ค)์์ ์ถ๋ฐํ๋ค. 2๊ฐ์ ํฌ์ธํฐ (leftPointer, rightPointer)๊ฐ 0๋ฒ์งธ ์ธ๋ฑ์ค์์ ์ถ๋ฐํ๊ณ , ๊ฒฝ์ฐ์ ๋ฐ๋ผ์..
-
[Algorithm] BFS & DFSAlgorithm 2022. 3. 15. 09:24
BFS (Breadth First Search) ๋ค์ฐจ์ ๋ฐฐ์ด์์ ๊ฐ ์นธ์ ๋ฐฉ๋ฌธํ ๋ ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฃจํธ ๋ ธ๋ (ํน์ ๋ค๋ฅธ ์์์ ๋ ธ๋)์์ ์์ํด์ ์ธ์ ํ ๋ ธ๋๋ฅผ ๋จผ์ ํ์ํ๋ ๋ฐฉ๋ฒ Queue๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ ๋ ๋ ธ๋ ์ฌ์ด์ ์ต๋จ ๊ฒฝ๋ก ํน์ ์์์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ณ ์ถ์ ๋ ์ฌ์ฉ ์๊ฐ ๋ณต์ก๋ O(N) BFS ์งํ ๊ณผ์ 1. ์์ํ๋ ์นธ์ ํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธํ๋ค๋ ํ์๋ฅผ ๋จ๊ธด๋ค. 2. ํ์์ ์์๋ฅผ ๊บผ๋ด์ ํด๋น ์นธ์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ์นธ์ ๋ํด ๋ค์ 3๋ฒ์ ์งํํ๋ค. 3. ํด๋น ์นธ์ ์ด์ ์ ๋ฐฉ๋ฌธํ๋ค๋ฉด ์๋ฌด๊ฒ๋ ํ์ง ์๊ณ , ์ฒ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ค๋ฉด ๋ฐฉ๋ฌธํ๋ค๋ ํ์๋ฅผ ๋จ๊ธฐ๊ณ ํด๋น ์นธ์ ํ์ ๋ฃ๋๋ค. 4. ํ๊ฐ ๋น ๋๊น์ง 2๋ฒ์ ๋ฐ๋ณตํ๋ค. ⇒ ๋ชจ๋ ์นธ์ด ํ์ 1๋ฒ์ฉ ๋ค์ด๊ฐ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ ์นธ์ด N๊ฐ์ผ ๋..
-
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ Level1 (Swift)Algorithm 2022. 2. 6. 23:40
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ ๋ฌธ์ ์ค๋ช ์ ์ ์ฌ์ ๋ฌด์ง๋ ๊ฒ์ํ ๋ถ๋ ์ด์ฉ์๋ฅผ ์ ๊ณ ํ๊ณ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ผ๋ก ๋ฐ์กํ๋ ์์คํ ์ ๊ฐ๋ฐํ๋ ค ํฉ๋๋ค. ๋ฌด์ง๊ฐ ๊ฐ๋ฐํ๋ ค๋ ์์คํ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ฐ ์ ์ ๋ ํ ๋ฒ์ ํ ๋ช ์ programmers.co.kr ๋ฌธ์ ํ์ด ํ๋ก๊ทธ๋๋จธ์ค์์ Level1 ๋ฌธ์ ์ค ์ ์ผ ๋ง์ง๋ง์ผ๋ก ๋จ์๋ ๋ฌธ์ .. ๋ญ๊ฐ ๊ทธ๋์ ๋ ์ด๋ ค์ด? ๋๋์ผ๋ก ๋ค๊ฐ์ค์ง ์์๋.. ์ถ๊ธฐ๋.. 1์ฐจ ์๋๋ ๋ต์ด ๋์์ง๋ง ๊ณ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋์๋ค. Dictionary, Set์ ์กฐ๋ง๊ฐ ๋ค์ ์ ๋ฆฌํด์ผ๊ฒ ๋ค. 1์ฐจ ์๋ ์ฒ์ ์๋ํ ์ฝ๋๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋์๋ค. ์ค๋ณต ์ ๊ณ ๋ฅผ ๋ง๊ธฐ ์ํด report๋ฅผ Set์ผ๋ก ๋ณํํ์ฌ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋๋ฐ, ์๋ฌด๋๋ ์ ๊ณ ๋นํ ํ์๋ฅผ ์ฒดํฌํ๋ฉด์ ์ด๋ฉ์ผ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ์์ด..
-
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค [์นด์นด์ค ์ธํด] ํคํจ๋ ๋๋ฅด๊ธฐ Level1 (Swift)Algorithm 2022. 2. 6. 16:02
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ํคํจ๋ ๋๋ฅด๊ธฐ [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr ๋ฌธ์ ํ์ด ์ ๋ ฅ์ผ๋ก ์ค๋ numbers ๋ฐฐ์ด์ ์๋ ์ซ์๋ค์ ๋๋ฅด๋๋ฐ, ์ด ๋ ์ฌ์ฉํ ์๊ฐ๋ฝ์ ๋ฌธ์์ด๋ก ๋ฆฌํดํ๋ ๋ฌธ์ . ๋จผ์ keypad๋ผ๋ ๋ฐฐ์ด์ ํคํจ๋ ํํ๋ฅผ ์ ์ฅํ๋ค. let keypad = [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"], ["*", "0", "#"]] ํคํจ๋ ๋ฐฐ์ด์ ์๋์ ๊ฐ์ด ์ ์ฅ๋์ด..