본문 바로가기

Algorithm39

문자열 뒤집기 fun reverseString(s: String): String { return s.reversed() } fun main() { println(reverseString("Hello World")) // "dlroW olleH" } 2023. 10. 29.
배열을 오른쪽으로 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.
List and Stack /** * 배열의 데이터를 순서대로 꺼내 조건에 맞게 각 바구니 (스택) 에 분류 한다. * 조건: 바구니의 합은 20 을 넘을수 없다. */ public List doDo() { final List elements = Arrays.asList(9, 7, 6, 6, 4, 3, 4, 5, 3, 4, 3, 4, 1, 2); List result = new ArrayList(); Stack stack = new Stack(); for (Integer el:elements) { int sum = stack.stream().reduce(0,Integer::sum)+el; if(sum 2018. 10. 20.