전체 글

문제 https://leetcode.com/problems/find-eventual-safe-states/description/ 각 노드의 라벨이 0부터 n-1까지 붙어있는 n개의 노드로 이루어진 방향 그래프가 있다. 그래프는 0-indexed 인 이차원 정수 배열 `graph`로 표현되고, graph[i]는 노드 i와 인접한 정수 배열이다. 즉, 노드 i로부터 grape[i]에 있는 노드들 간에는 간선이 존재한다. 만약 한 노드에서 나가는 간선이 없다면 해당 노드는 terminal node이다. 한 노드가 safe node라는 것은 해당 노드로부터 시작하는 모든 가능한 경로가 terminal node 혹은 다른 safe node로 이어진다는 것이다. 그래프의 모든 safe node를 포함하는 배열을 ..
문제 https://leetcode.com/problems/minimum-depth-of-binary-tree/description/ 주어진 이진트리에서 트리의 최소 깊이를 구하여라. 최소 깊이는 루트 노드부터 가장 가까운 리프 노드까지 내려가는 최단 거리에 있는 노드의 수이다. Note: 리프 노드는 자식 노드를 가지고 있지 않다. 풀이 1. BFS - 너비 우선 탐색 fun minDepth(root: TreeNode?): Int { if(root == null) return 0 val q = ArrayDeque() q.add(root) var depth = 1 while (q.isNotEmpty()) { val curSize = q.size repeat(curSize) { val curNode = q..
문제 https://leetcode.com/problems/valid-palindrome/description/ Palindrome 문구는 주어진 문자열에서 모든 대문자를 소문자로 바꾼 후, 영숫자가 아닌 문자들을 지웠을 때, 앞뒤로 똑같이 읽힌다. Alphanumeric(영숫자)는 문자와 숫자를 포함한다. 풀이 1. 코틀린 확장함수를 맘껏 활용한 풀이 fun isPalindrome(s: String): Boolean = s.lowercase().filter { it.isLetterOrDigit() }.let { it == it.reversed() } 단 두줄로 문제를 풀 수 있었다. 다만 leetcode 코틀린 버전이 낮아서인지 Deprecated된 함수를 사용하여야 함! (toLowerCase) 시간..
문제 https://leetcode.com/problems/shortest-path-in-binary-matrix/description/ 주어진 n x n 이진행렬인 grid에서, 배열의 가장 짧은 Clear Path의 길이를 구하여라. 만약 Clear Path가 없다면, -1을 반환하여라. 이진행렬에서의 Clear Path는 다음 조건을 만족하는 (0, 0) 좌표에서 (n-1, n-1) 좌표까지의 경로 이다. 조건 - 방문하는 모든 좌표의 값은 0이다. - 경로에서 모든 인접한 좌표는 8방향(상, 하, 좌, 우, 우상, 우하, 좌상, 좌하)으로 연결되어있다. Clear Path의 길이는 경로 내 방문한 좌표의 수 이다. 풀이 전형적인 최단 거리를 구하는 BFS 문제 : Queue 자료구조를 사용하여 너..
Caffeine Cache 란? 로컬캐시는 해당 기기에서만 사용되는 캐시이다. 속도가 빠르지만 분산 시스템일 경우 데이터 정합성이 깨질 수 있다. 비즈니스 요구사항에 따라 어느정도까지 정합성을 맞춰야할지, 얼마나 속도가 중요할지에 따라 캐시를 선택한다. Caffeine Cache는 java 캐싱 라이브러리 중 높은 성능을 가지고 있는 캐시이다. Caffeine은 Window TinyLfu eviction 정책을 가지고 있는데, 이는 최적의 적중률을 제공한다. Setting build.gradle.kts dependencies { implementation("org.springframework.boot:spring-boot-starter-cache") implementation("com.github.b..
문제 주어진 정수 n이 있을 때, 조건을 만족하는 answer 배열(1-indexed)을 반환하라. - i가 3 과 5 로 나누어진다면, answer[i] == "FizzBuzz" - i가 3 으로 나누어진다면, answer[i] == "FizzBuzz" - i가 5 로 나누어진다면, answer[i] == "FizzBuzz" - 위 조건 중 어느것도 만족하지 못하는 경우, answer[i] == i (i는 문자열) 풀이 기본 조건문을 활용하는 문제 더보기 class LT_412_FizzBuzz { fun fizzBuzz(n: Int): List { val answer = List(n + 1) { i -> if (i % 15 == 0) "FizzBuzz" else if (i % 3 == 0) "Fizz"..
점이
DOTELOPER