์ ์ฒด ๊ธ(53)
-
[Algorithm] ์ต๋๊ณต์ฝ์ ๊ตฌํ๊ธฐ - ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ (Euclidean algorithm)
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ด๋? (์ด๋ฆ์ด ๋ญ๊ฐ ๊ต์ฅํด์ ์ฒ์ ๋ค์ผ๋ฉด ์ซ๊ฒ ๋๋ค ๐) ์ฌ์ค ๊ฐ๋จํ๋ค. ๊ทธ๋ฅ 2๊ฐ ์์ฐ์์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ(Euclidean algorithm) ๋๋ ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ 2๊ฐ์ ์์ฐ์ ๋๋ ์ ์(ๆดๅผ)์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ๋์ด๋ค. 2๊ฐ์ ์์ฐ์(๋๋ ์ ์) a, b์ ๋ํด์ a๋ฅผ b๋ก ๋๋ ๋๋จธ์ง๋ฅผ r์ด๋ผ ํ๋ฉด(๋จ, a>b), a์ b์ ์ต๋๊ณต์ฝ์๋ b์ r์ ์ต๋๊ณต์ฝ์์ ๊ฐ๋ค. ์ด ์ฑ์ง์ ๋ฐ๋ผ, b๋ฅผ r๋ก ๋๋ ๋๋จธ์ง r'๋ฅผ ๊ตฌํ๊ณ , ๋ค์ r์ r'๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ๋๋จธ์ง๊ฐ 0์ด ๋์์ ๋ ๋๋๋ ์๊ฐ a์ b์ ์ต๋๊ณต์ฝ์์ด๋ค. ์ด๋ ๋ช ์์ ์ผ๋ก ๊ธฐ์ ๋ ๊ฐ์ฅ ์ค๋๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก์๋ ์๋ ค์ ธ ์์ผ๋ฉฐ, ๊ธฐ์์ 300๋ ๊ฒฝ์..
2022.02.20 -
[Kotlin in Action] 10์ฅ. Annotaion ๊ณผ Reflection
์ง๋ ๊ธ(9์ฅ. ์ ๋ค๋ฆญ์ค(Generics)์ ์ด์ด Kotlin in Action ์ด๋ผ๋ ์ฑ ์ ๋ณด๋ฉด์ ๋งค์ฃผ ๊ณต๋ถํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ๊ธฐ๋กํ๋ค. ์ด๋ฒ ์ฃผ๋ 10์ฅ Annotaion ๊ณผ Reflection ์ ๋ํ ๋ด์ฉ์ด๋ค. ์ด๋ฒ ์ฑํฐ๋ ๊ฐ๋ ๋ณด๋ค๋ annotaion ๊ณผ reflection ์ด ๋ง์ด ์ฌ์ฉ๋๋ json serializer ์ธ ์ ์ดํค๋(jkid) ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ์ํ๋ ๋ด์ฉ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ง ์ ๋ฆฌํ๋ค. ๋ชฉ์ฐจ Annotaion Android Annotations is an annotation-driven framework that allows you to simplify the code in your applications and reduces the boilerplate o..
2022.02.20 -
[Kotlin in Action] 9์ฅ. ์ ๋ค๋ฆญ์ค(Generics) - reified / variance / in / out
์ง๋ ๊ธ(8์ฅ. ๊ณ ์ฐจ ํจ์์ inline function)์ ์ด์ด Kotlin in Action ์ด๋ผ๋ ์ฑ ์ ๋ณด๋ฉด์ ๋งค์ฃผ ๊ณต๋ถํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ๊ธฐ๋กํ๋ค. ์ด๋ฒ ์ฃผ๋ 9์ฅ ์ ๋ค๋ฆญ์ค ์ ๋ํ ๋ด์ฉ์ด๋ค. ์ฑ ๋ด์ฉ์ ์ด๋ง์ด๋งํ๊ฒ ๋ง๊ธฐ ๋๋ฌธ์.. ๋ด ๊ธฐ์ค์ผ๋ก ์๋ก ์๊ฒ ๋ ๊ฒ๋ค, ํ์์๋ ๋ชจ๋ฅด๊ณ ์ง๋์ณค๋ ๋ถ๋ถ ๋๋ ํ๋ฒ ์ง๊ณ ๋์ด๊ฐ๋ฉด ์ข์ ๋ด์ฉ๋ค ์์ฃผ๋ก ์ ๋ฆฌํ๋ค. ๋ชฉ์ฐจ Generics Generics๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ ํ๋ผ๋ฏธํฐ(type parameter)๋ฅผ ๋ฐ๋ ํ์ ์ ์ ์ํ ์ ์๋ค. ์ ๋ค๋ฆญ ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ตฌ์ฒด์ ์ธ ํ์ ์ธ์(type argument)๋ก ์นํํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด List๋ผ๋ ํ์ ์ด ์๋ค๋ฉด ๊ทธ ์์ ๋ค์ด๊ฐ๋ ์์์ ํ์ ์ ์๋ค๋ฉด ์ธ๋ชจ๊ฐ ์์ ๊ฒ์ด๋ค. ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ..
2022.01.30 -
[RxJava] Combining Operators (๊ฒฐํฉ ์ฐ์ฐ์) - merge / zip / combineLatest ๋น๊ต
RxJava์ ๊ฒฐํฉ ์ฐ์ฐ์(combining operator) ์ค merge / zip / combineLatest ์ ๊ฐ ํน์ง์ ์์๋ณด๊ณ , ์ฐจ์ด์ ์ ๋น๊ตํด ์ธ์ ์ด๋ค ํจ์๋ฅผ ์จ์ผ ํ ์ง์ ๋ํด ์ค๋ช ํ๋ค. ๋ชฉ์ฐจ merge() Flattens two ObservableSources into a single ObservableSource, without any transformation == ๋ณํ ์์ด ๋ ๊ฐ์ ObservableSource๋ฅผ ํ๋์ ObservableSource๋ก ๋ณํฉํ๋ค ํน์ง์ ์๋์ ๊ฐ๋ค. ์ฌ๋ฌ๊ฐ์ ์์ค์์ ๋์ค๋ ๋ชจ๋ ์คํธ๋ฆผ์ด ๊ทธ๋๋ก ๋ฐํ๋๋ค. ์์ ๋ค์ด์ด๊ทธ๋จ์ ๋ณด๋ฉด, merge ํจ์๋ฅผ ๊ฑฐ์ณ๋ ๊ธฐ์กด ์์ดํ ์ด ๊ณ ๋๋ก ๋ฐํ๋๋ค! ํ๋์ ์์ค์์ ์๋ฌ๊ฐ ๋๋ฉด ์คํธ๋ฆผ ์์ฒด๊ฐ ์ข ๋ฃ๋๋ค ์์ ๋ค์ด..
2022.01.24 -
Android ๋๋ฒ๊น ๋ฐฉ๋ฒ ๋ฐ Tip (Debug mode ์ฌ์ฉํ๊ธฐ)
์ฑ์์ ๋ค์ํ ์ด์๋ก ๋๋ฒ๊น ์ ํ๊ฒ ๋๋ค. ์ด๋, ๋ด ๋ง๋๋ก ์ฑ์ด ๋์์ ํ์ง ์๋๋ค๋ฉด, ๋๋ ์์น ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๊ทธ ๋ฌธ์ ๊ฐ ์ด๋์ ์๊ธฐ๋์ง, ์ด ๋ฉ์๋๋ฅผ ์ ํ๊ณ ์๋ ๊ฒ์ธ์ง, ๋ณ์์ ๋ด๊ฐ ์๊ฐํ ๊ฐ์ด ์ ์์ ์ผ๋ก ํ ๋น๋๊ณ ์๋์ง ๋ฑ๋ฑ~ ์ ๋ง ๋ค์ํ ์ด์ ๋ก ๋๋ฒ๊น ์ ํด์ผ ํ๋ค. ์ฌ๊ธฐ์๋ ์๋๋ก์ด๋ ์คํ๋์ค์์ ์ ๊ณตํ๋ Debug mode ๋ฅผ ํตํด ๋๋ฒ๊น ์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ค. ๋ชฉ์ฐจ โน๏ธ Android Studio Arctic Fox | 2020.3.1 Patch 4 ๊ธฐ์ค์ผ๋ก ์์ฑ๋จ ๋๋ฒ๊ทธ ๋ชจ๋ ์ฌ์ฉ ๋ฐฉ๋ฒ ๊ฐ์ฅ ๋จผ์ ์ฝ๋์ ํน์ ํฌ์ธํธ์์ ์ด๋ค ๊ฐ์ด ๋ค์ด๊ฐ ์๋์ง, ๋ฉ์๋๋ ์ ์คํ๋๊ณ ์๋์ง ๋ฑ์ ์๊ธฐ ์ํด ๋ด๊ฐ ํ์ธํ๊ณ ์ถ์ ์ฝ๋์ break point(์ค๋จ์ )๋ฅผ ๊ฑธ์ด์ผ ํ๋ค. break p..
2022.01.16 -
[Kotlin in Action] 8์ฅ. ๊ณ ์ฐจํจ์์ inline function (inline ํจ์์ ์ฅ๋จ์ , ์ฌ์ฉ ์ด์ ๋ฑ)
์ง๋ ๊ธ(ํด๋์ค, ๊ฐ์ฒด, ์ธํฐํ์ด์ค)์ ์ด์ด Kotlin in Action ์ด๋ผ๋ ์ฑ ์ ๋ณด๋ฉด์ ๋งค์ฃผ ๊ณต๋ถํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ๊ธฐ๋กํ๋ค. ์ด๋ฒ ์ฃผ๋ 8์ฅ ๊ณ ์ฐจํจ์์ inline function ์ ๋ํ ๋ด์ฉ์ด๋ค. ์ฑ ๋ด์ฉ์ ์ด๋ง์ด๋งํ๊ฒ ๋ง๊ธฐ ๋๋ฌธ์.. ๋ด ๊ธฐ์ค์ผ๋ก ์๋ก ์๊ฒ ๋ ๊ฒ๋ค, ํ์์๋ ๋ชจ๋ฅด๊ณ ์ง๋์ณค๋ ๋ถ๋ถ ๋๋ ํ๋ฒ ์ง๊ณ ๋์ด๊ฐ๋ฉด ์ข์ ๋ด์ฉ๋ค ์์ฃผ๋ก ์ ๋ฆฌํ๋ค. ๋ชฉ์ฐจ ๊ณ ์ฐจ ํจ์ ์ ์ ๊ณ ์ฐจ ํจ์๋ ๋๋ค๋ ํจ์ ์ฐธ์กฐ๋ฅผ ์ธ์๋ก ๋๊ธธ ์ ์๊ฑฐ๋ ๋๋ค๋ ํจ์ ์ฐธ์กฐ๋ฅผ ๋ฐํํ๋ ํจ์. ๊ณ ์ฐจ ํจ์ ์์ ๐ list.filter { x > 0 } // ๋๋ค๋ฅผ ์ธ์๋ก ๋ฐ๋ filter ํจ์๋ ๊ณ ์ฐจํจ์ public inline fun Iterable.filter(predicate: (T) -> Boolean): List..
2022.01.09