분류 전체보기378 배열을 오른쪽으로 N번 회전하기 fun rotateArrayRight(arr: IntArray, n: Int): IntArray { val len = arr.size val rotatedArr = IntArray(len) for (i in arr.indices) { rotatedArr[(i + n) % len] = arr[i] } return rotatedArr } fun main() { val s = intArrayOf(1, 2, 3, 4, 5) val n = 2 val rotatedS = rotateArrayRight(s, n) println(rotatedS.joinToString(", ")) } 코드 설명: 먼저, rotateArrayRight라는 함수를 정의하여 구현을 시작합니다. 이 함수는 정수 배열 arr와 정수 n을 매개변.. 2023. 10. 15. 큐 2개로 스택 구현하기 with Kotlin '2개의 큐로 스택을 어떻게 구현할 수 있을까?'에 대한 내용입니다. 큐(Queue)와 스택(Stack)은 프로그래밍에서 자주 사용되는 자료 구조로, 각각 First-In-First-Out(FIFO)과 Last-In-First-Out(LIFO)의 특성을 가지고 있습니다. 이 두 자료 구조의 동작 방식이 다르기 때문에, 하나를 이용해 다른 하나를 구현하는 것은 꽤 재미있는 문제로 다가옵니다. 기본 원리 스택을 구현하기 위해 큐 2개를 사용하는 기본 원리는 다음과 같습니다: 원소를 스택에 '푸시'하기 위해서는, 큐 A를 이용합니다. 원소를 스택에서 '팝'하거나 '피크'하기 위해서는, 큐 B를 이용하여 큐 A의 원소를 하나 빼고, 나머지 원소들을 큐 B로 이동시킨 뒤, A와 B의 역할을 바꾸어 팝/피크 연산을.. 2023. 10. 15. 두 개의 스택을 사용하여 큐 구현하기 스택과 큐의 기본 개념 스택 (Stack) 스택은 데이터를 후입선출(LIFO: Last-In-First-Out) 방식으로 저장하는 자료 구조입니다. 즉, 가장 나중에 들어간 데이터가 가장 먼저 나오게 됩니다. 큐 (Queue) 반면에 큐는 선입선출(FIFO: First-In-First-Out) 방식으로 데이터를 저장합니다. 처음 들어간 데이터가 가장 먼저 나오게 되죠. 스택 두 개로 큐를 만들기 스택 두 개를 사용하여 큐의 동작을 구현할 수 있습니다. 기본 알고리즘은 다음과 같습니다: Enqueue (데이터 추가): 첫 번째 스택을 사용하여 데이터를 추가합니다. Dequeue (데이터 제거): 만약 두 번째 스택이 비어 있다면, 첫 번째 스택의 모든 요소를 두 번째 스택으로 옮긴 후, 두 번째 스택에서 .. 2023. 10. 15. 중괄호 짝 맞추기 문제 풀이 주어진 문자열에서 중괄호 {와 }가 올바르게 짝을 이루고 있는지 판별하는 함수를 작성하세요. 올바른 짝을 이루고 있다면 true, 그렇지 않다면 false를 반환해야 합니다. 해결 전략 이 문제를 해결하기 위해선 스택이라는 자료구조를 활용합니다. 스택은 LIFO(Last In, First Out)의 특징을 가진 자료구조로, 마지막에 들어간 요소가 가장 먼저 나오게 됩니다. fun isValidBrackets(s: String): Boolean { val stack = mutableListOf() for (ch in s) { when (ch) { '{' -> stack.add(ch) '}' -> { if (stack.isNotEmpty() && stack.last() == '{') { stack.remov.. 2023. 10. 15. 스프링의 RedisLockRegistry를 활용한 제한된 상품의 동시성 제어 및 주문 처리 개요 이 포스팅에서는 스프링의 RedisLockRegistry를 활용하여 제한된 상품의 주문 처리에 대한 동시성 제어를 다루어 보겠습니다. 사용자가 동일한 제한된 상품을 구매할 때, 여러 주문 서비스 인스턴스에서 동시성 제어를 해야 할 필요가 있습니다. 이 때 RedisLockRegistry가 큰 역할을 합니다. 설정 의존성 추가 id 'org.springframework.boot' version '3.1.4' id 'io.spring.dependency-management' version '1.1.3' 먼저, 필요한 의존성을 추가합니다. implementation 'org.springframework.integration:spring-integration-redis' RedisLockRegistry 설.. 2023. 10. 9. 스프링 부트에서 외부 API 서비스를 병렬 처리하여 응답하는 방법 많은 서비스에서 다양한 자산 정보를 사용자에게 제공해야 하는 경우가 있습니다. 예를 들어, 사용자가 보유한 적립금, 쿠폰 개수, 코인 수량 등의 정보를 한번의 요청으로 빠르게 얻고 싶어합니다. 스프링 부트와 자바를 활용하여 이런 자산 정보들을 병렬로 처리하고, 그 결과를 사용자에게 효과적으로 제공하는 방법에 대해 살펴보겠습니다. 스프링 부트에서는 @Async 어노테이션과 CompletableFuture를 활용하여 쉽게 비동기 호출을 구현할 수 있습니다. 이를 통해 여러 API 호출을 동시에 수행하고, 모든 결과를 기다린 뒤 하나로 합치는 병렬 처리를 구현할 수 있습니다. 본 글에서는 적립금, 쿠폰 개수, 코인 수량과 같은 사용자의 다양한 자산 정보를 병렬로 조회 및 처리하여 응답하는 API 서비스 구현에.. 2023. 10. 9. 이전 1 ··· 4 5 6 7 8 9 10 ··· 63 다음