본문 바로가기

전체 글

(90)
[ 알고리즘 / Kotlin ] 다익스트라(Dijkstra) 알고리즘 다익스트라 알고리즘은 다이나믹 프로그래밍을 활용한 대표적인 최단경로 탐색 알고리즘이며 현실 세계에 사용하기 매우 적합한 알고리즘 중 하나이죠 이 그림을 예시로 들어볼게요 문제에서 1부터 다른 모든 노드로 가는 최단 경로를 구하라고 합니다! 이때 2,3,4 까지의 최단거리는 각각 10,6,13으로 정할 수 있어요 컴퓨터가 보기엔 말이죠 ㅎ 저희 눈에는 아 4번 노드까지 한 번에 가는 거리보다 3번 노드를 거쳐 4번노드로 가는 거리가 더 짧다고 바로 떠오르지만 말이죠 (컴퓨터는 생각보다 멍청..?합니다) 그래서 저희는 이러한 컴퓨터를 위해 우리 머릿속에 있는 로직을 구현해야되여 구체적인 과정은 이러합니다 1) 출발 노드 설정 2) 출발 노드를 기준으로 각 노드의 최소 비용 저장 3) 방문하지 않은 노드 중 ..
[RxJava] filter(), reduce() 1. filter() filter() 함수는 말 그대로 Observable에서 원하는 데이터만 걸러내는 함수입니다! 위의 그림처럼 filter()는 O만 통과를 하죠!! 비교적 간단한 함수라 바로 코드로 넘어가볼게요 val data = intArrayOf(1,2,3,4) val source = Observable.fromArray(data) .filter(number-> number % 2 ==0) source.subscribe(System.out::println) //result //2 //4 filter함수에 짝수만 걸러내는 로직을 구성했어요 ! 그랬더니 2,4 즉 짝수만 걸러져 나오는 것을 볼 수 있습니당 filter함수는 여기서....끝인데 너무 짧으니 비슷한 함수 몇개를 간단하게 알아볼게연 - ..
[ 알고리즘 / Kotlin ] 위상 정렬 알고리즘 위상 정렬은 순서가 정해져있는 작업을 차례로 수행해야 할 때 그 순서를 결정해주기 위해 사용하는 알고리즘입니다. 백준에 나와있는 문제로 예시를 들겠습니다! www.acmicpc.net/problem/1005 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N 과 건물간의 건설순서규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부� www.acmicpc.net 문제 서기 2012년! 드디어 2년간 수많은 국민들을 기다리게 한 게임 ACM Craft (Association of Construction Manager Craft)가 발매되었다. 이 게임은 지금까지 나온 게임들과는 다르게 ACM크래프트는 다이나믹한..
[ 알고리즘 / Kotlin] 플로이드 와샬(Floyd Warshall) 알고리즘 플로이드 와샬 알고리즘은 '모든 정점'에서 '모든 정점'으로의 최단 경로를 구할 때 사용하는 알고리즘입니다! 흔히들 알고 있는 최단 경로 알고리즘인 다익스트라 알고리즘에서는 가장 적은 비용을 하나씩 선택해야 했다면 플로이드 와샬 알고리즘은 기본적으로 거쳐가는 정점을 기준으로 알고리즘을 수행한다는 특징이 있습니다. 이러한 플로이드 와샬 알고리즘은 기본적으로 다이나믹 프로그래밍 기술에 의거합니다! 모든 경로에 대해 최솟값으로 갱신해주거든여!! package floydwarshall import kotlin.math.min private lateinit var arr: Array private const val INF = 1000000000 private fun main() { arr = arrayOf( in..
[RxJava] map(), flatMap() 1. map() map() 함수는 입력값을 어떤 함수에 넣어서 원하는 값으로 변환하는 함수입니다! String을 다른 형태(?)의 String으로 , Integer를 String이나 다른 객체로 변환할 수도 있습니다. map() 함수는 입력 데이터와 그것을 변환해줄 함수를 이어주는 중개업자가 있다고 생각하면 이해하기 쉬울 것 같아여 그림으로도 볼게요 👀 그림에서 원을 입력받아서 다이아몬드로 출력하고 있죠! 다음은 코드로 보시겠습니다. balls = arrayOf("1","2","3") soucre : Observable = Observable.fromArray(balls).map(myball-> myball+"!") source.subscribe(System.out::println) // result /..
[RxJava] Subject 클래스, ConnectableObservable 클래스 1. Subject 클래스 앞서 잠시 말씀드렸다시피 Subject클래스는 차가운 Observable을 뜨거운 Observable로 바꿔준다고 했었습니다. Subject 클래스의 특성은 Observable의 속성과 구독자의 속성이 모두 있다는 점입니다. Observable처럼 데이터를 발행할 수도 있고 구독자처럼 발행된 데이터를 바로 처리할 수도 있습니다. Subject클래스에는 AnsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject 등이 있습니다!! 이것들을 알아봅시다! 1) AsyncSubject 클래스 AsyncSubject 클래스는 Observable에서 발행한 마지막 데이터를 얻어올 수 있는 Subject 클래스입니다. 완료되기 전 마지막 데..
[RxJava] Single 클래스, Maybe 클래스, 뜨거운 Observable 1. Single 클래스 Single클래스는 데이터를 무한하게 발행할 수 있는 Observable과 달리 오직 1개의 데이터만 발행하도록 한정합니다. 보통 결과가 유일한 서버 API를 호출할 때 유용하게 쓰이죠 중요한건 데이터 하나가 발행과 동시에 종료(onSuccess)된다는 점입니다. 라이프 사이클 관점에서 보면 onNext()와 onComplete() 함수가 onSuccess() 함수로 통합된 것입니다. 따라서 Single 클래스의 라이프 tkldzmf 함수는 onSuccess(T value) 함수와 onError() 함수로 구성됩니다 1) just() Single 클래스는 Observable과 거의 같은 방법으로 활용할 수 있어요! ( Single클래스가 Observable의 특수한 형태이기 때문..
[RxJava] Observable 클래스 Observable의 역할은 데이터 흐름에 맞게 알림을 보내 구독자가 데이터를 처리할 수 있도록 하는 것입니다! 책에 따르면 RxJava 프로그래밍은 Observable에서 시작해 Observable로 끝난다고 해도 과어인 아닐 정도로 중요한 개념이라고 하네요 따라서 이번 글에서는 Observable 클래스에 대해 알아보겠습니다!! 1. Observable 클래스 Observable은 옵저버 패턴을 구현합니다. 옵저버 패턴은 객체의 상태 변화를 관찰하는 관찰자(옵저버) 목록을 객체에 등록합니다. 그 후 상태 변화가 있을 때마다 메서드를 호출하여 객체가 직접 목록의 각 옵저버에게 변화를 알려줍니다. 라이프 사이클은 존재하지 않으며 보통 단일 함수를 통해 변화만 알립니다. 여기서 잠깐! Observable은..