Reactor란? Reactor는 리액티브 스트림즈의 구현제 입니다. Spring WebFlux 기반의 리액티브 애플리케이션을 제작하기 위한 핵심 역할을 담당하고 있습니다. 쉽게 말해서 리액티브 프로그래밍을 위한 라이브러리라고 정의 할 수 있습니다. 따라서, Reactor Core 라이브러리는 Spring WebFlux 프레임워크에 라이브러리로 포함되어 있습니다. Reactor의 특징 아래 사진은 Reactor 공식 홈페이지의 메인 화면입니다. 이를 통해 Reactor가 어떤 특징들을 가지고 있는지 알아보겠습니다. Reactive Streams Reactor는 리액티브 스트림즈 사양을 구현한 리액티브 라이브러리입니다. Non-Blocking Reactor는 JVM 위에서 실행되는 Non-Blocking ..
문제 링크 https://www.acmicpc.net/problem/14003 14003번: 가장 긴 증가하는 부분 수열 5 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) www.acmicpc.net 💡 풀이 기존 가장 긴 증가하는 부분 수열 즉, LIS을 응용해야 하는 문제입니다. LIS - DP LIS를 해결하는 가장 간편한 방법은 DP를 이용하는 것입니다. 주어진 숫자 배열에서 인덱스를 한 칸씩 늘려가며 확인하는 방법입니다. 하지만, 이 방법은 2중 반복문을 사용하기 때문에 $O(N^2)$의 시간복잡도를 가집니다. 따라서, 해당 문제는 입력 N의 ..
I/O I/O란 간단히 얘기하면 데이터의 입력(Input)과 출력(Output) 을 일컫는 말입니다. 단순히 파일 I/O를 넘어서, 데이터를 조회하거나 추가하는 DB I/O, 네트워크 통신에서 네트워크 I/O 등이 포함됩니다. I/O는 어플리케이션의 성능에 가장 영향을 많이 미칩니다. 따라서, 높은 성능을 보장해야 하는 어플리케이션 입장에서 I/O는 큰 장애물이 될 수 있습니다. 이 I/O의 두 가지 방식인 Blocking I/O와 Non-Blocking I/O에 대해 알아봅시다. Blocking I/O Blocking I/O란, I/O 작업이 진행되는 동아 유저 프로세스가 자신의 작업을 중단한채 I/O가 끝날 때까지 대기하는 방식 을 의미합니다. 즉, 하나의 스레드가 I/O에 의해서 차단되어 대기하는 ..
리액티브 스트림즈가 무엇인지 살펴보고, 리액티브 스트림즈의 핵심 컴포넌트인 Publisher와 Subscriber의 동작 과정에 대해서 알아보겠습니다. 리액티브 스트림즈란? 리액티브한 코드 작성과 구성을 용이하게 해 주는 리액티브 라이브러리를 어떻게 구현할지 정의해 놓은 표준 사양을 리액티브 스트림즈라고 합니다. 한마디로, 데이터 스트림을 Non-Blocking이면서 비동기적인 방식으로 처리하기 위한 리액티브 라이브러리의 표준 사양 이라고 표현할 수 있습니다. 이를 구현한 구현체에는 RxJava, Reactor, Akka .. 등 다양한 것들이 있습니다. 리액티브 스트림즈 구성요소 리액티브 스트림즈를 통해 구현해야 하는 API 컴포넌트에는 Publisher, Subscriber, Subscription,..
문제 링크 https://www.acmicpc.net/problem/1509 1509번: 팰린드롬 분할 세준이는 어떤 문자열을 팰린드롬으로 분할하려고 한다. 예를 들어, ABACABA를 팰린드롬으로 분할하면, {A, B, A, C, A, B, A}, {A, BACAB, A}, {ABA, C, ABA}, {ABACABA}등이 있다. 분할의 개수의 최솟값을 출력하 www.acmicpc.net 💡 풀이 기존 팰린드롬 문제와 다이나믹 프로그래밍을 함께 사용하는 문제입니다. 로직은 다음과 같습니다. 문자열의 i번째까지 탐색했을 때의 분할 개수의 최솟값을 `dp[i]`로 나타내겠습니다. 이 `dp[]` 배열 활용해 다이나믹 프로그래밍을 진행합니다. 맨 오른쪽 즉, 문자열의 i번째 인덱스를 기준으로 1 ~ (i - ..
문제 링크 https://www.acmicpc.net/problem/4386 4386번: 별자리 만들기 도현이는 우주의 신이다. 이제 도현이는 아무렇게나 널브러져 있는 n개의 별들을 이어서 별자리를 하나 만들 것이다. 별자리의 조건은 다음과 같다. 별자리를 이루는 선은 서로 다른 두 별을 일 www.acmicpc.net 💡 풀이 주어진 2차원 점들을 최소 비용으로 이었을 때의 가중치 값을 구하는 문제입니다. 그래프의 정점들을 모두 연결했을 때의 가중치의 최솟값을 구하는 문제이므로, 최소 스패닝 트리(MST)를 사용하면 쉽게 풀이할 수 있는 문제입니다. 최소 스패닝 트리(MST) - Prim 알고리즘 저는 최소 스패닝 트리를 해결하기 위해, Prim 알고리즘을 사용했습니다. 프림 알고리즘은 우선 순위 큐(..