์ ์ฒด ๊ธ
[Backjoon_4375] 1 (Java)
๋ฌธ์ ๋งํฌ https://www.acmicpc.net/problem/4375 4375๋ฒ: 1 2์ 5๋ก ๋๋์ด ๋จ์ด์ง์ง ์๋ ์ ์ n(1 ≤ n ≤ 10000)๊ฐ ์ฃผ์ด์ก์ ๋, 1๋ก๋ง ์ด๋ฃจ์ด์ง n์ ๋ฐฐ์๋ฅผ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. www.acmicpc.net ๋ฌธ์ ์์ฝ ๋๋ณด๊ธฐ ๋๋ณด๊ธฐ ๋๋ณด๊ธฐ 2์ 5๋ก ๋๋์ด ๋จ์ด์ง์ง ์๋ ์ ์ n(1 ≤ n ≤ 10000)๊ฐ ์ฃผ์ด์ก์ ๋, 1๋ก๋ง ์ด๋ฃจ์ด์ง n์ ๋ฐฐ์๋ฅผ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค. ์ ๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , n์ด ์ฃผ์ด์ง๋ค. 1๋ก ์ด๋ฃจ์ด์ง n์ ๋ฐฐ์ ์ค ๊ฐ์ฅ ์์ ์์ ์๋ฆฌ์๋ฅผ ์ถ๋ ฅํ๋ค. ์๊ฐ ์ ํ 1์ด ๋ฉ๋ชจ๋ฆฌ ์ ํ 128MB ๋ฌธ์ ํ์ด n์ ์ ๋ ฅ๋ฐ์ n์ ๋ฐฐ์์ค 1๋ก๋ง ์ด๋ฃจ์ด์ง ๊ฐ์ฅ ์์..
๋ธ๋ฃจํธํฌ์ค(3) ์์ด
์์ด ์์ด(Purmutation)์ ์ซ์๋ฅผ ์ฌ์ ์์ผ๋ก ๋์ดํ ๊ฒ์ ์๋ฏธํ๋ค. ๋๋ณด๊ธฐ Ex) 1,2,3 ์์ด 1 2 3 -> ์์ ์์ด(์ค๋ฆ์ฐจ์) 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 -> ๋ ์์ด(๋ด๋ฆผ์ฐจ์) ์์ด์ ์์์ง์ , ๋์ง์ , ๋ค์ ์์ด,์ด์ ์์ด๋ก ํํํ ์ ์๋ค. ์์์์ด๊ณผ ๋ ์์ด์ ๊ฐ๊ฐ ์ค๋ฆ์ฐจ์๊ณผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๊ตฌ์ฑ๋๋ค. ๋ค์ ์์ด ์์ด์ ๋ค์์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋์์ด์ ๊ตฌํด์ ๊ทธ ๋ค์ ๊ตฌํด์ฃผ์ด ํด๊ฒฐํ๋ค. private boolean nextPermutation(int[] numbers){ int prevIndex; int n = numbers.length; int nextIndex = n-1; int changeIndex = -1; for(int i = n-2; i >= ..
๋ธ๋ฃจํธํฌ์ค(2) ์ฌ๊ท
์ฌ๊ท๋ฅผ ์ฐ๋ฉด ์ฌ๊ท๋ฅผ ์ฐ๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํ๋๋ก ๋ง๋ค ์ ์๋ค. ์ฌ๊ท๋ฅผ ์จ์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ๋ ๊ฒฝ์ฐ๋ ๋๊ฐ์ง์ด๋ค. 1. ์์๊ฐ ์๋ ๊ฒฝ์ฐ(P) n๊ฐ์ ์๋ฅผ ๋์ดํ๋ ๋ฐฉ๋ฒ์ ์์ด๋ค.(์ค๋ณต๊ฐ๋ฅ) -> O(n!) /** * index -> ํ์ฌ ์๋ฅผ ๋๋ ์์น * arr -> ํ์ธํ๋ ค๊ณ ๋ง๋๋ ๋ฐฐ์ด */ public void recursive1(int index, int[] arr){ if(index == arr.length){ //์ข ๋ฃ ์กฐ๊ฑด } for(int i = 1; i O(2^n) /** * index -> ํ์ฌ ์๋ฅผ ๋๋ ์์น * arr -> ํ์ธํ๋ ค๊ณ ๋ง๋๋ ๋ฐฐ์ด */ public void recursive2(int cnt, int[] arr, int value, int n){ if(ind..
๋ธ๋ฃจํธํฌ์ค(1) - ๋ฌด์์ ํด๋ณด๊ธฐ
๋ธ๋ฃจํธ ํฌ์ค ์๊ณ ๋ฆฌ์ฆ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํด๋ณด๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ฌด์์ ๋ฐ๋ณต๋ฌธ์ ๋๋ ค ๊ตฌํ ์๋ ์๋ค. ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ ์์ ๋ฌธ์ : n์ด ์ฃผ์ด์ก์๋, 1๋ถํฐ n ์ค์ 2์ ๋ฐฐ์์ ์๋? (1