전체 글
-
카카오 2024 WINTER INTERNSHIP알고리즘 2025. 5. 28. 23:19
Lv.1 가장 많이 받은 선물 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/258712?language=kotlin 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 구현에 가까운 문제다. class Solution { fun solution(friends: Array, gifts: Array): Int { var answer: Int = 0 val n = friends.size var nameToIndex = friends.withIndex().associate { it.value to it.index..
-
배열알고리즘 2025. 5. 21. 00:28
1. Zero Array Transformation I문제 : https://leetcode.com/problems/zero-array-transformation-i 쿼리를 돌면서 배열에서 바로 -1 처리를 하면 시간복잡도가 O(Q*N)이 되어 Time Limit Exceeded 예외가 발생하게 된다.이를 효율적으로 처리하기 위해 차이 배열(difference array) 또는 누적 배열 prefix sum 기법을 활용해야한다. https://sheep1sik.tistory.com/161 [ Algorithm ] 차분 배열 ( Difference Array ) 기법프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers...
-
힙 (Heap)알고리즘 2025. 5. 20. 23:20
1. Find Median from Data Stream 문제 : https://leetcode.com/problems/find-median-from-data-stream 숫자가 더해지는 연산과 더해진 리스트이 중간값을 찾는 문제이다. 리스트가 짝수인 경우에는 중간의 2자리를 더하고 결과를 Double로 반환한다. 이 문제는 단순 리스트로 문제를 풀려고하면 Time Limit Exceeded 예외가 발생한다 .우선순위 큐를 이용해서 간단하게 중간값을 구할 수 있다. 최소 우선순위 큐인 minHeap과 최대 우선순위 큐인 maxHeap을 사용하고 이 둘의 길이를 항상 반으로 유지하도록 해서 리스트를 반으로 쪼개 구성하는 방식이다. 값을 더하는 addNum()의 경우 시간복잡도는 O(logN) 공간복잡..
-
트리알고리즘 2025. 5. 14. 21:54
이진 트리 1. maximum-depth-of-binary-tree문제 : https://leetcode.com/problems/maximum-depth-of-binary-tree/ 트리의 깊이를 찾는 문제다. 먼저 DFS 방식으로 풀 수 있다. n : 노드의 갯수, h : 트리의 최대 깊이 시간 복잡도 : O(n) -> 모든 노드를 한번씩 방문 공강 복잡도 : O(h) -> 재귀 콜 스택에 최대 h개의 노드 fun maxDepth(root: TreeNode?): Int { if(root == null) return 0 var left = maxDepth(root.left) var right = maxDepth(root.right) return ..
-
인텔리제이에서 최상단 호출부 hierarchy 확인하는 방법.etc 2025. 5. 4. 15:58
이번에 로직 이관을 하면서 이관하고자 하는 repository 레벨의 메서드가 어디서 사용되는지 한번에 확인할 수 있는 방법을 찾아보았다. 방법 다음의 글을 읽고 확인하는 방법을 찾았다. https://stackoverflow.com/questions/37730511/intellij-or-other-possible-to-see-a-graph-tree-of-all-calls-made-in-java In IntelliJ, when your cursor on a callable method name, pressing ctrl-alt-H will bring you to "call Hierarchy" window.Same if you prefer menu: "Navigate->call Hierarchy" ..
-
WebClientResponseException의 responseBodyAsString에서 한글이 깨지는 문제 해결Spring 2025. 5. 4. 15:50
갑자기 잘 읽어오던 WebClientResponseException의 responseBodyAsString 부분에서 인코딩이 올바르게되지 않아 한글이 깨져서 보였다. 처음의 구성은 다음과 같았다. private fun parseErrorResponse(ex: WebClientResponseException): ErrorResponse { return try { val body = String(ex.responseBodyAsByteArray, StandardCharsets.UTF_8) // 바이트 배열을 UTF-8로 디코딩 objectMapper.readValue(body, ErrorResponse::class.java) } cat..
-
grpc 서버 성능 테스트테스트 2025. 5. 3. 18:41
이번에 다른 서버에 구현되어 있던 로직을 회원 서버로 이관하게 되면서 추가적인 부하가 발생하는 것에 대비하여 회원팀에서 관리하는 서버에 성능 테스트가 필요하여 공부한 내용을 정리한다. 해당 서버에서는 grpc Service로 해당 기능을 구현하여 제공하기 때문에 grpcService 서버의 성능 테스트를 수행하는 방법을 공부하였다. 성능 테스트 사전설정 테스트는 xk6, grafana, influxdb 를 사용하였다. 테스트 스크립트를 구현하기 전에 먼저 기존의 평균 RPS, 최대 RPS, 일일 방문자 수, latency를 활용해서 평균 및 최대 VUser와 목표 RPS를 설정하였다. 참고) https://dodop-blog.tistory.com/322 부하 테스트 ( + k6, grafana ..
-
문자열알고리즘 2025. 4. 17. 22:57
문자열 찾기 1) longest-substring-without-repeating-characters문제 : https://leetcode.com/problems/longest-substring-without-repeating-characters/ 1. 슬라이딩 윈도우 반복되지 않는 가장 긴 문자열의 길이를 반환하는 문제다. (풀고 보니 슬라이딩 윈도우와 비슷한 방식으로 풀었다.)n = 문자열길이, k = 현재 윈도우 길이 (최대 n)이라고 가정할때, temp.contains(), temp.indexOf(), temp.substring(...) + s[i] 모두 O(k)의 시간복잡도를 갖고, 이 연산이 최대 n번 반복될 수 있다. 시간복잡도 : O(n^2) 문자열 연산이 계속 일어나므로 새로운 문자열이..