๊ฐ๋จํ Reactive ์์คํ ์ ๊ตฌํํด๋ด ์๋ค.
Reactive Programing์, ์ด๋ค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด, ๊ทธ ๊ฐ์ ์ด์ฉํ๊ณ ์๋ ๊ณณ์ผ๋ก ์ํ๊ฐ ์ ํ๋ฉ๋๋ค. ์ ์ดํด๊ฐ ์๋๋ฉด, ์์ ์ ์์์ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ A์ ์ B์ ์ ์๊ฐ์ด ์์ ๋, ์ C๋ A+B๋ผ๋ ์์์ ๊ฒฐ๊ณผ๊ฐ์ด๋ผ๊ณ ๊ฐ์ ํด๋ด ์๋ค. ์ด ๋, ์ A์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด, ์ C์ ๊ฐ์ ์๋์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ๊ทธ๋๋ ์ ์ดํด๊ฐ ์๊ฐ๋ฉด, ์ด๋ฒ ๊ธฐํ์ Reactive์ ๊ฐ๋ ์ ๊ณต๋ถํ์ธ์.
https://en.wikipedia.org/wiki/Reactive_programming
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๊ฐ ์๋๊ณ , ์ค๊ณ ๋ฌธ์ ์ ๋๋ค. ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํธ๋๊ฒ ์ฒ๋ผ ์ ๊ทผํ๋ฉด ์๋ฉ๋๋ค.
์ด๋ฒ ๋ฌธ์ ์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ์๋์ ๊ฐ์ต๋๋ค.
ํ์ด ํ๋๋ฐ์ ์๋ ์์ ์ ๊ฐ์ ํ๋ฉด, ๋ฐฐ์ด์ฒ๋ผ ๋ณด์ผ๊ฒ์ ๋๋ค. ๊ฐ๊ฐ์ ์ธ๋ฑ์ค๋ ์ํ๋ฒณ์ผ๋ก ์ด๋ฃจ์ด์ ธ์๊ณ , A~Z ๊น์ง์ ๋๋ค.
- ์ด ๋ฐฐ์ด์ ์ ์ ๋๋ ๋๊ฐ์ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ์ฌ์น์ฐ์ฐ ์์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. (+ - * /)
- ๊ฐ๊ฐ์ ์ ์ ์ผํ๋ก ๊ตฌ๋ถํฉ๋๋ค.
- ์์์ ๊ดํธ๋ก ๋ฌถ์ฌ์๊ณ , ์ํ๋ฒจ์ผ๋ก๋ ์ธ๋ฑ์ค ๋๋ ์ ์๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ์ด ๋ฐฐ์ด ๋ค์์๋ ์ ์ ๊ฐ์ด ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋๋์ง๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋๋ค.
- ์ํ์ฐธ์กฐ๋ ํ์ฉํ์ง ์์ต๋๋ค. (A๋ฒ์งธ ์ธ๋ฑ์ค์ ์์์๋ A๊ฐ ํฌํจ๋์ง ์๋๋ค๋ ๋ป)
- ๊ฐ์ ๊ณ์ฐํ ์ ์๋ค๋ฉด(0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ ๋ฑ) #err์ ์ถ๋ ฅํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด, ์๋์ ๊ฐ์ ๊ฒ์ ๋๋ค.
100, 20, 3023, (A+E), 10, -30, (D+10), 0, 12345
A=>10
C=>(A*E)
E=>100
์ ์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ง๋ค, ์ํฅ์ ๋ฐ๋ ์ ์ ๋ณ๊ฒฝ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
A=>10 : A=>10, D=>20, G=>30
C=>(A*E) : C=>100
E=>100 : E=>100, D=>110, G=>120, C=>1000
- ๊ธฐ์กด์ Reactive ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Rx๋ฑ๋ฑ)์ ์ฌ์ฉํ๋ฉด ๋ฐ์น์ ๋๋ค.
- Reactive Programing์ ๋ชจ๋ ์์๋ฅผ ๊ตฌํํด๋ผ ํ์๋ ์๊ณ , Propagation(์ ํ)๋ง ์ ๋๋ก ๋๋ฉด ๋ฉ๋๋ค.
- ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ์๋๋ก์ด๋ GUI๋ก ๊ตฌํํฉ๋๋ค.
- Column์ด ํ๋๋ฟ์ธ ์คํ๋ ๋์ํธ๋ฅผ ๊ตฌํํ๋ค๊ณ ์๊ฐํ๋ฉด๋ฉ๋๋ค.
- ์ธ๋ก RecyclerView๋ก ์คํฌ๋กค ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๋ฉด ๋๊ฒ ์ฃ ? ๊ฑฐ๊ธฐ์ ์ ํ๋ ์ ์ ๊ฐ์ ์ ๋ ฅํ๋ EditText๊ฐ ์์ผ๋ฉด ๋๊ฒ ๋ค์.
- Propagation์ ์ ์ ์ง์ ๋ฐ์๋๋ฉด ๋ฉ๋๋ค.
์ฒซ ๋ฌธ์ ์ธ Simple Reactive System์ ํตํด ์๋ก ๋น์ทํ๊ฒ ๊ตฌํ๋ ๋ถ๋ถ์ด ์์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ฐ๋ก Cell์ด๋ผ๋ ํด๋์ค์์ต๋๋ค. ์ ์์ ํํ์์ ํ์ฑํ์ฌ ์ด๊ฒ์ด ์ซ์์ธ์ง, ์์์ธ์ง๋ฅผ ๊ตฌ๋ถํ์ฌ ๊ฐ ๊ณ์ฐ์ ํ์ฉํ์์ต๋๋ค. ์ด์ ์์ ๋ฟ๋ง์ด ์๋๋ผ ์ค์ ์์ ์ฒ๋ผ =Fun() ๊ณผ ๊ฐ์ด ์ฌ๋ฌ ํจ์๋ค์ ์ ๊ณตํ๋๋ก ํ์ฅํ๋ค๊ณ ๊ฐ์ ํด๋ณด์ฃ . ์ง์๋๋ ํจ์๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ์ด์ ์ฒ๋ผ isExpression๊ณผ ๊ฐ์ด ํน์ ์์์์ ๊ตฌ๋ถํ๊ธฐ์ํ ๋ณ์๋ค์ ๊ณ์ ์์ฑํ๋ค๊ณ ์๊ฐํด๋ณด์ธ์. ์กฐ๊ฑด๋ฌธ์ด ๋๋ฌดํ๊ณ ์ฝ๋๊ฐ ์ง์ ๋ถํด ๋ณด์ฌ ์์ ํ๊ณ ์ถ์ด์ง ๊ฒ๋๋ค. ์ ๊ทธ๋ผ ์ฌ๊ธฐ์ ๋๋ฒ์งธ ๋ฌธ์ ์ ๋๋ค.
###Simple Reactive System ์์ ํ์ฅ ์ ์์ ์ฌ์น์ฐ์ฐ๋ง ์ ๊ณตํ๋ Simple Reactive System์ ๊ฐ๋จํ ํจ์๋ฅผ ์ง์ํ๋๋ก ์์๊ณ์ฐ ๋ถ๋ถ์ ํ์ฅํฉ๋๋ค. ๊ฐ ์์ ํ์ ์ ์๋ง๋ ํด๋์ค๋ค์ ๊ตฌํํ์ฌ ์์ ๊ฐ์ด ์ง์ ๋ถํด์ง ๋ถ๋ถ๋ค์ ๊น๋ํ๊ฒ ์ ๋ฆฌํด ๋ด ์๋ค.
###์ ๋ ฅ & ์ถ๋ ฅ
- ๊ธฐ์กด ์ ์์ ์ฌ์น์ฐ์ฐ์ ๋ํ ๋์์ ๋ฌธ์ 1๊ณผ ๋์ผํฉ๋๋ค.
- ๋จ, ์์ ์ ๋ ฅ์ '='์ ์์ํ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.(ํจ์ ์ ๋ ฅ๊ณผ ๋์ผํ๊ฒ ๋ง์ถ๋๋ก ์์ )
- ์์ ์ ๋ ฅ๋ํด ๊ดํธ ๊ท์น๋ ํธ์์ ์ ๊ฑฐํ์ ๋ ๋ฉ๋๋ค. =(A+E) ๋๋ =A+E ๋ ๊ฐ์๊ฒ์ผ๋ก ๋ด.
- ์ถ๊ฐ๋๋ ํจ์์ ๋ํ ์ ๋ ฅ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- =SUM(A:Z) ํจ์์ ์์์ '='๋ก ์์ํ๊ณ ๊ทธ๋ค์ 'ํจ์๋ช '๊ณผ '๋ฒ์'๊ฐ ์ ๋ ฅ๋ฉ๋๋ค.
- ์ง์ํ ํจ์๋ SUM, AVERAGE, MAX, MIN ๋ค๊ฐ์ง ์ ๋๋ค. ๋ฒ์๋ด ๊ฐ๋ค์ค ๋น์ด์๋ ์ ์ ๊ฐ์ ๋ฌด์ํ๊ณ ๊ณ์ฐํฉ๋๋ค. (์ค์ ์์ ์ฒ๋ผ AVERAGE์ ๊ฒฝ์ฐ ๋๋๋ ์์ ์นด์ดํ ์ ํฌํจํ์ง ์์์ ๋งํฉ๋๋ค.)
=SUM(A:Z) : A๋ถํฐ Z์
๊น์ง์ ํฉ์ ๊ตฌํจ
=AVERAGE(A:Z) : A๋ถํฐ Z์
๊น์ง์ ํ๊ท ์ ๊ตฌํจ
=MAX(A:Z) : A๋ถํฐ Z์
๊ฐ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ตฌํจ
=MIN(A:Z) : A๋ถํฐ Z์
๊ฐ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ๊ตฌํจ
๋ฒ์ ์ ํ : A๋ถํฐ Z์
๊น์ง ์
๋ ฅ ๊ฐ๋ฅ
(A:D), (C:Y), (E:F)์ ๊ฐ์ด ๋ฒ์์ ์ต์๋ 2์
์ด์์ด๋ฉฐ (A:A)์ ๊ฐ์ ์ผ์ด์ค๋ ์ง์๋์ง ์์.
(C:A)์ฒ๋ผ ์ญ์ผ๋ก ์ง์ ๋ ๋ฒ์๋ ์
๋ ฅ๋์ง ์๋๋ค ๊ฐ์
๋ฌธ์ 1์ ์ฐ๊ฒฐ๋ ๋ฌธ์ ์ด๋ฏ๋ก, ๋ฌธ์ 1์ ๋ฏธ์์ฑ์ ๋ฐ๋ฅธ ํจ๋ํฐ๊ฐ ์กด์ฌํฉ๋๋ค. ๋ฌธ์ 1์ ๋ง์ ์์ฑํ๊ณ ๊ตฌํํด ๋ณด๋๊ฒ์ ๊ถ์ฅํฉ๋๋ค๋ง ์ํฉ์ ๊ณ ๋ คํ์ฌ ๋ค์์ ์ ํํ์ค ์ ์์ต๋๋ค. ๊ฐ๊ธ์ ์ด๋ฉด ๋ฌธ์ 1์ ์ฝ๋๋ฅผ ํ์ฉํด ๋ณด๋๊ฒ ์ ์ถ๋ ฅ ํ ์คํธ ํ์ธ์ ์ข๊ฒ ์ฃ ~?
- ํ์๋ ๋ฌธ์ 1 ์ฝ๋์ ์ถ๊ฐ ๊ตฌํ
- ๋ฌธ์ 2์ ํด๋น๋๋ ์์ ํ์ฅ์ ๋ํ ๋ถ๋ถ๋ง ๊ตฌํ
๋ก๋ ๋ฒํธ๋ค์ ๋ณด๋๋์ค ์ฌ๋ฐ๋ ์์ด์ด ์๊ฐ๋ฌ์ต๋๋ค.
๋งคํ ๋น์ฒจ๋ฒํธ์ ๋น์ฒจ์๋ค์ ์๋ฅผ ๊ณฑํ ๋์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
๋จ, ๋น์ฒจ์๊ฐ 0์ผ ๊ฒฝ์ฐ 1์ ๋ํด์ค๋๋ค.
์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ํต๊ณ๊ฐ์ด ๊ฐ์ฅ ๋์ ์์ด๊ณผ ๊ฐ์ฅ ๋ฎ์ ์์ด์ ๊ตฌํฉ๋๋ค.
๋ง์ฝ, 7๋ฒ์งธ๋ก ๋ฑ์ฅํ ์ซ์์ ํต๊ณ๊ฐ์ด 8-10๋ฒ์งธ์ ๊ฐ๋ค๋ฉด ๋ชจ๋ ์ถ๋ ฅํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋น์ฒจ๋ฒํธ๊ฐ 1,2,3,4,5,6,7 ์ผ๋ 1๋ฑ ์๊ฐ 8์ด๋ผ๋ฉด,
lottoCnt[1]+=8
lottoCnt[2]+=8
lottoCnt[3]+=8
lottoCnt[4]+=8
lottoCnt[5]+=8
lottoCnt[6]+=8
lottoCnt[7]+=8
1๋ฑ์๊ฐ 0 ์ด๋ผ๋ฉด,
lottoCnt[1]++
lottoCnt[2]++
lottoCnt[3]++
lottoCnt[4]++
lottoCnt[5]++
lottoCnt[6]++
lottoCnt[7]++
API ๋ฌธ์
API LINK : http://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo=
example : http://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo=644
output : {"bnusNo":8,"firstWinamnt":1831451204,"totSellamnt":61846599000,"returnValue":"success","drwtNo3":17,"drwtNo2":13,"drwtNo1":5,"drwtNo6":36,"drwtNo5":28,"drwtNo4":23,"drwNoDate":"2015-04-04","drwNo":644,"firstPrzwnerCo":8}
- ๊ฐ์ฅ ๊ฐ๊ฒฐํ ๋๋คํ์์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- flatmap์ ์ฌ์ฉํฉ๋๋ค.
- ์์ฒญํ URL์ json ํ์์ ํ์ฑ์ ํตํด map ํํ๋ก ๋ณํํฉ๋๋ค.
fun main(args: Array<String>) {
val lottoNumberSequence : lottoNumberSequence = LottoNumberSequence()
lottoNumberSequence print MAX_EXPOSE // ์ต๋ค ๋
ธ์ถ ์ซ์ํ
lottoNumberSequence print MIN_EXPOSE // ์ต์ ๋
ธ์ถ ์ซ์ํ
}
๋ก๋ ์์ด ์ถ๋ ฅ ~ [์ต๋ค ๋
ธ์ถ ๊ธฐ์ค]
1. 1, 2, 3, 4, 5, 6, 7
.
.
.
=> ๋ง์ง๋ง ์๋ฆฟ์์ ์ซ์ 7๊ณผ ์ซ์ 10 ๋
ธ์ถํ์๊ฐ 200๋ฒ์ผ๋ก ๊ฐ์๊ฒฝ์ฐ ์ถ๋ ฅ
1. 1, 2, 3, 4, 5, 6, 7
2. 1, 2, 3, 4, 5, 6, 10
๋ก๋ ์์ด ์ถ๋ ฅ ~ [์ต์ ๋
ธ์ถ ๊ธฐ์ค]
1. 15, 16, 17, 18, 19, 20, 21
.
.
.
=> ๋ง์ง๋ง ์๋ฆฟ์์ ์ซ์ 21๊ณผ ์ซ์ 22 ๋
ธ์ถํ์๊ฐ 63๋ฒ์ผ๋ก ๊ฐ์๊ฒฝ์ฐ ์ถ๋ ฅ
1. 15, 16, 17, 18, 19, 20, 21
2. 15, 16, 17, 18, 19, 20, 22
.
.
.
API ์์ฒญ ํ์๊ฐ ๋ง์ ์๋๊ฐ ๋๋ฆฝ๋๋ค.
์ด๋ฅผ ๊ฐ์ ํด๋ณด์ธ์.
ํจ์ํ ์๋ฃํ๊ณผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ฐ์ต์ ํฉ์๋ค.
๋ก๋ ๋ฒํธ๋ฅผ ์ถ์ถํ๋ ํจ์๋ฅผ ๋ง๋ญ๋๋ค. N๊ฐ์ ์๋ก ๋ค๋ฅธ ๋๋ค ์ซ์๋ฅผ 1~M ๋ฒ์์์ ์ถ์ถํฉ๋๋ค.
lotto(4, 10) // 1~10๊น์ง์ ์ซ์์ค์์ 4๊ฐ์ ๋๋ค ์ซ์ ์ถ์ถ
1, 2, 3, 4
์ ๋ ฌ ํจ์๋ฅผ ๋ง๋ญ๋๋ค. ์ด ์ ๋ ฌ ํจ์๋ ๋ฆฌ์คํธ ๋ด๋ถ์ ์๋ธ๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํฉ๋๋ค. (๊ธธ์ด๊ฐ ๊ฐ์ผ๋ฉด ์๋ธ๋ฆฌ์คํธ์ ๋ฌธ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.)
์
๋ ฅ๊ฐ=> [['a', 'b', 'c'], ['d', 'e'],['f', 'g', 'h'], ['d', 'e'], ['i', 'j', 'k', 'l'], ['m', 'n'], ['o']]
์ ๋ ฌํ๋ฉด => [['o'], ['d', 'e'], ['d', 'e'], ['m', 'n'], ['a', 'b', 'c'], ['f', 'g', 'h'], ['i', 'j', 'k', 'l']]
์์๋ฅผ ์ฐพ๋ ํจ์๋ฅผ ๋ง๋ญ๋๋ค. ์ด ํจ์๋ ์ฃผ์ด์ง ๋ฒ์ ๋ด์ ์กด์ฌํ๋ ์์์ ๋ฆฌ์คํธ๋ฅผ ๋ฆฌํดํฉ๋๋ค.
์์ 7, ๋ 31
์ถ๋ ฅ => [7, 11, 13, 17, 19, 23, 29, 31]
N bit Gray code๋ฅผ ์์ฑํ๋ ํจ์๋ฅผ ๋ง๋ญ๋๋ค. https://en.wikipedia.org/wiki/Gray_code (๊ทธ๋ ์ด ์ฝ๋๋ ํ ๋นํธ์ฉ ๋ฐ๋๋๋ค.)
GrayCode(1) = ["0", "1"]
GrayCode(2) = ["00", "01", "11", "10"]
GrayCode(3) = ["000", "001", "011", "010", "110", "111", "101", "100"]
GrayCode(N) = ??
๊ฐ๋ฏธ ์์ด(ํ๊ตญ์ Look and Say) (์ฐธ๊ณ - https://ko.wikipedia.org/wiki/%EC%9D%BD%EA%B3%A0_%EB%A7%90%ED%95%98%EA%B8%B0_%EC%88%98%EC%97%B4)
๋๋ค์์ผ๋ก ํ๊ธฐ(n = 10)
์ฝ๋ฃจํด์ ์ด์ฉํด์ ํ๊ธฐ(n = 100) ์ฝ๋ฃจํด์ผ๋ก ํ๋ฉด ant(1000)๋ฅผ ํ ์ ์๋ค๊ณ ํ๋ค.
fun main(args: Array<String>) {
ant(10)
}
output
11221131132111311231
์ด๋ฒ์๋ ์ธ๊ณต์ง๋ฅ ๊ฒ์์ ํ๋ ๋ง๋ค์ด๋ด ์๋ค. ๊ฒ์์ ๊ท์น์ ๋จ์ํฉ๋๋ค.
- ํ๋ ์ด์ด๊ฐ 1~100์ฌ์ด์ ์ ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ๊ทธ๋ฌ๋ฉด ์ปดํจํฐ๋ ํ๋ ์ด์ด๊ฐ ์ ๋ ฅํ ์ซ์๋ฅผ ๋ง์ถฅ๋๋ค.
1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์
ex1) 90
ex2) 71
๋ฑ ํ๋ฒ์ ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ๋ง์ถ ํ์๋ ์์ต๋๋ค. ์ฌ๋ฌ๋ฒ ์๋ํด์ ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ๋๋์ด ์ฐพ๊ฒ๋๋ฉด !๋ฅผ ํจ๊ป ์ถ๋ ฅํฉ๋๋ค.
ex1) 100 99 98 97 96 95 94 93 92 91 90!
ex2) 50 75 63 69 72 70 71!
- ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฅ๊ฐ์ ์ฐพ์๋ ์๊ด ์์ง๋ง, ๋นจ๋ฆฌ ์ฐพ์ ์๋ก ์ข์ต๋๋ค.
- ๋จ, ์ต์ํ์ ์ฝ๋๋ก ๊ตฌํํด์ผ ํฉ๋๋ค. ๊ฐ์ ์ฑ๋ฅ์ด๋ผ๋ฉด, ์ฝ๋๊ฐ ์ ์ผ ์งง์ ์ฌ๋์ด 1๋ฑ!
์ํ์ผ๋ก n๋ช ์ ์ฌ๋๋ค์ด ๋๊ทธ๋๊ฒ ๋๋ฌ ์์ ์๋ฐ์ด๋ฒ ๊ฒ์์ ํฉ๋๋ค. ์๋ฐ์ด๋ฒ ๊ฒ์์ด ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฒซ๋ฒ์งธ ์ฌ๋๋ถํฐ ์์ํด k๋ฒ์งธ์ ์ฌ๋์ ์ด์ผ๋ก ์์ ์ ๊ฑฐ ํฉ๋๋ค.
- ์ ๊ฑฐ๋ ์ฌ๋์ ๋ค์์ ๊ธฐ์ค์ผ๋ก ๋ค์ k๋ฒ์งธ ์ฌ๋์ ์์ ์ ๊ฑฐ ํฉ๋๋ค.
- ์ด๋ ๊ฒ ๋ง์ง๋ง ์ฌ๋์ด ์ ๊ฑฐ๋ ๋๊น์ง ์งํํฉ๋๋ค.
์ด๋ฌํ ๊ท์น์ ์งํํ๋ฉด์ ์ ๊ฑฐ๋๋ ์ฌ๋ ์์๋ฅผ ์์ด๋ก ๋ง๋ ๊ฒ์ด ์กฐ์ธํธ์ค(์์ธํธ์ค)์์ด ์ด๋ผ๊ณ ํฉ๋๋ค. https://ko.wikipedia.org/wiki/%EC%9A%94%EC%84%B8%ED%91%B8%EC%8A%A4_%EB%AC%B8%EC%A0%9C
(n, k) ์กฐ์ธํธ์ค ์์ด์ n๋ช ์ ์ฌ๋์ด ์๊ณ k๋ฒ์งธ ๋ง๋ค์ ์ฌ๋์ ์ ๊ฑฐํด ๋๊ฐ๋ ์์์ ๋๋ค. ์๋ฅผ๋ค์ด (7, 3) ์กฐ์ธํธ์ค ์์ด์ [3,6,2,7,5,1,4] ์ด๋ฉฐ. ๋ง์ง๋ง์ ์ ๊ฑฐ๋๋ ์ฌ๋์ 4 ์ ๋๋ค.
- ์๋๋ (7, 3) ์กฐ์ธํธ์ค ์์ด์ ์์ฑ ์์ ์
๋๋ค.
1,2,3,4,5,6,7
1๋ถํฐ ์์, ์ธ๋ฒ์งธ์ธ 3 ์ ๊ฑฐ
1,2,4,5,6,7
4๋ถํฐ ์์, 3๋ฒ์งธ์ธ 6 ์ ๊ฑฐ
1,2,4,5,7
7๋ถํฐ ์์, 3๋ฒ์งธ์ธ 2 ์ ๊ฑฐ
1,4,5,7
4๋ถํฐ ์์, 3๋ฒ์งธ์ธ 7 ์ ๊ฑฐ
1,4,5
1๋ถํฐ ์์, 3๋ฒ์งธ์ธ 5 ์ ๊ฑฐ
1,4
1๋ถํฐ ์์, 3๋ฒ์งธ์ธ 1 ์ ๊ฑฐ
4
๋ง์ง๋ง 4 ์ ๊ฑฐ
์ ๊ฑฐ๋ ์์์ ์ํ ์์ด์ [3,6,2,7,5,1,4] ์
๋๋ค.
๊ทธ๋ผ ์ฌ๊ธฐ์ ๋ฌธ์ ์ ๋๋ค. ์กฐ์ธํธ์ค ์์ด ์์์ ๋ฐ๋ผ ์ด์งํผ ์ฃฝ๋๊ฑฐ ๋ด๊ฐ ๋ช๋ฒ์งธ์ ์ฃฝ๋์ง๊ฐ ๊ถ๊ธํ ์ฌ๋์ด ์์ต๋๋ค. ์ด๋ฌํ ์ฌ๋์ ์ํด ํน์ ํ๊ฒ(t)์ด ๋ช๋ฒ์งธ์ ์ ๊ฑฐ๋๋์ง ์์์๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ด ์๋ค.
Josephus(n, k, t) : (n, k) ์กฐ์ธํธ์ค ์์ด์ ๋ํด ํ๊ฒ(t)์ด ๋ช๋ฒ์งธ์ ์ฃฝ๋์ง ์์๋ฅผ ์๋ ค์ค๋๋ค.
์ถ๋ ฅ : ์์ ์์์์ (7, 3, 2) ๋ 3์
๋๋ค.
์ฝ๋์ ์์ ์ต์ํ์ ์ฝ๋๋ง ์ฌ์ฉํ๋๋ก ํฉ๋๋ค. ๋ฌธ์ ์ ๋จ์ํ๋ฅผ ์ํด 3 < n, k, t <= 1000 ์ผ๋ก ์ ํ ํฉ๋๋ค.
๋งค์ฃผ ๋ก๋๋ฅผ ์ฌ๋ฌ๊ฐ๋ ํด์ ์ ๋ฒํธ ์ ํ์ด ๊ณ ๋ฏผ์
๋๋ค.
ํด์ ์ ์ ์ฑ๊ฒจ์ฃผ๋ ํ์์ ๋ฌธ์ 3์ ํตํด์ ๋ก๋ ์์ด์ ๋ง๋ค๊ฒ ํ๋ค์.
๋งค๋ฒ ์ฝํ๋ฆฐ ์ฝ๋๋ฅผ ๋๋ ค์ ์ซ์๋ฅผ ๋ฝ์ ํ์ ๋ก๋๋ฅผ ์ฌ๋ฌ๊ฐ์๋ ์์ต๋๋ค.
์๊ฐ๋ฌ์๋ ๋ก๋ ์์ด์ ์ป์ด์ผ ํฉ๋๋ค.
์ด์ ํด์ ์ ์ํด์ ๋ก๋ ๋ฒํธ ์ฑ์ ๋ง๋ค์ด ์ค์๋ค.
- ํ์
- ๊ถ์ฅ
- ํด์ ์ด ์ผ๋ง๋ ์ฑ์ ์ฌ์ฉํ๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค.
- ํ ์์ผ์ด ๋๊ธฐ ์ ์ ๋ก๋๋ฅผ ์ฌ๋๋ก ์๋ ค์ฃผ๊ณ ์ถ์ต๋๋ค.