본문 바로가기

기타107

[LeetCode] Top K Frequent Elements 개인풀이 문제 숫자 배열 nums과 숫자 k가 주어집니다. nums 배열에서 자주 반복되는 값을 k개 반환하도록 합니다. 순서는 상관 없습니다. 예제_1 입력: nums = [1,1,1,2,2,3], k = 2 출력: [1,2] 예제_2 입력: nums = [1], k = 1 출력: [1] 제약조건 1 count.get(n1) - count.get(n2)); // 2. keep k top frequent elements in the heap // O(N log k) k) heap.poll(); } // 3. build an output array // O(k log k) .. 2021. 5. 1.
[spring + spock + TestContainer] Spring, Spock Framework에서 기능 테스트 하기 - TestContainer 사용 안녕하세요. Spring에서 DB 기능 테스트를 할 때 어떤 걸 주로 이용하시나요? 제가 생각하기로는 여러분들은 로컬에서 쉽게 돌릴 수 있는 인메모리 DB인 H2를 가장 많이 사용하실 것 같습니다. 왜냐하면 사용하기 쉽기 때문이겠죠. 오늘제가 여러분들께 알려드리고자 하는 것은 조금 다른 기능 테스트 방법을 제공해주는 TestContainers입니다. H2를 사용하는 것과 어떻게 다르며 사용할 수 있는지 알아보도록 하겠습니다. :) TestContainer TestContainer는 로컬 환경에서 실제 DB에 테스트를 할 수 있도록 지원하는 Java 라이브러리입니다. DB라면 인메모리 DB인 H2를 사용하면 되지 않느냐? 라고 생각하실 수 있습니다. 그럼에도 불구하고 TestContainer를 왜 사용할까.. 2021. 4. 30.
[LeetCode] Single Number 개인풀이 문제 integer 배열이 주어집니다. 1개의 숫자를 제외하고는 2번씩 노출됩니다. 1번만 노출되는 숫자를 찾으세요. 나아가기 : O(N) 시간복잡도와 O(1)의 공간복잡도를 가질 수 있도록 해결할 수 있으면 좋습니다. 예제 1 입력 : [2,2,1] 출력 : 1 예제 2 입력 : [4,1,2,1,2] 출력 : 4 예제 3 입력 : [1] 출력 : 1 제약 조건 1 2021. 4. 28.
[기타] DDD(domain driven development)의 계층 구조(layered architecture)에 대해서 알아보자 안녕하세요. 이전 우리는 [spring + 객체 지향 원칙] Spring에서의 의존성 역전의 원칙(Dependency Inversion Principle) 포스팅에서 Layered Architecture에 대해서 간단히 확인해보았습니다. Layered Architecture는 코드의 아키텍처를 구성할 때 주로 사용되며 일반적으로 3 계층 또는 4 계층으로 나누어 사용합니다. 3 계층으로 나눌때는 표현계층(Presentation Layer) - 서비스 계층 (Business Layer) - 영속성 계층(Persistence Layer) 으로 나누어 사용하곤 합니다. DDD를 이용할 때도 이에 대응되는 계층적인 구조가 있는데요. 오늘 배워볼 내용은 DDD에서의 계층의 분화에 대한 부분입니다. 각 계층별 설명.. 2021. 4. 24.
[LeetCode] Sqrt(x) 개인풀이 문제 양수인 Integer x가 주어질 때 x의 root 값의 정수 부분을 구하세요. 예제 1 입력 4 출력 2 2는 4의 root값 예제 2 입력 8 출력 2 8의 root값은 2.8242... 이기때문에 양의 정수 부분의 값은 2 제약조건 0 2021. 4. 21.
[git] git stash에 대해서 알아보자 안녕하세요. 오늘은 git stash 명령어에 대해서 알아보는 시간을 가져보도록 하겠습니다. git stash 명령어는 언제 사용하는가 ? stash 저장소는 임시저장소입니다. 프로젝트에서 작업을 하고 있었습니다. 그런데 다른 요청이 들어와서 다른 일을 먼저 진행하게 되었습니다. 해당 요청을 처리하기 위해서는 branch의 전환이 필요합니다. 하지만 branch를 전환하기 위해서는 Index Storage의 데이터를 비워야합니다. 그러기 위해 commit을 이용할 수 있습니다. 하지만 commit은 커밋 로그가 남으며 원하는 목적과 동떨어집니다. 이럴때 임시 저장소로 사용할 수 있는것이 바로 stash 명령어이며 이 명령어는 stash Area를 사용합니다. git repository의 종류 [git] .. 2021. 4. 13.
[LeetCode] Word Search(글자 찾기) 개인 풀이 문제 m x n 크기의 board와 문자열 하나가 주어집니다. board에서 문자열을 얻어낼 수 있다면 true 그렇지 않다면 false를 리턴하세요. board 한칸에는 하나의 문자가 들어가며 문자열은 한문자에서 한칸씩 이동하여 만들어야합니다. 또한 중복으로 접근하는것은 불가능 합니다. 예제 보드판 예제 1 입력 word = "ABCCED" 출력: true [0,0] -> [0,1] -> [0,2] -> [1,2] -> [2,2] -> [1,2]로 가능 예제 2 입력 word = "SEE" 출력: true [1,3] -> [2,3] - [2,2]로 가능 예제 3 입력 word = "ABCB" 출력: false 제한 사항 m == board.length n == board[i].length 1 2021. 4. 3.
[LeetCode] Reverse String(문자열 뒤집기) 개인 풀이 문제 문자열을 뒤집는 메서드를 작성하세요. 주어진 입력은 char 배열입니다. 단, 별도의 array를 생성하면 안되며 입력받은 메모리만을 이용하여 문제를 해결하여야합니다. 또한 char 배열의 내부에는 ascii characters로 표현가능한 문자열들만 있다고 가정합니다. 예제 1 입력 : ["h","e","l","l","o"] 출력 : ["o","l","l","e","h"] 예제 2 입력 : ["H","a","n","n","a","h"] 출력 : ["h","a","n","n","a","H"] 원본 문제 : https://leetcode.com/problems/reverse-string/ 개인 풀이 가장 간단하게 떠오르는 풀이방법은 해당 배열의 크기만큼 배열을 하나 더 생성 한 후 하나씩 거꾸로 매핑.. 2021. 3. 16.
[LeetCode] 3Sum 개인 풀이 문제 Integer로 주어지는 배열이 있습니다. 해당 배열의 요소중 3개를 선택해서 합이 0이 만들어지는 경우를 출력하세요. 중복된 경우는 한번만 출력합니다. 예제 1 입력: nums = [-1,0,1,2,-1,-4] 출력: [[-1,-1,2],[-1,0,1]] 예제 2 입력: nums = [] 출력: [] 예제 3 입력: nums = [0] 출력: [] 제약조건 nums의 길이는 0 ~ 3000까지 가능 10^5 2021. 3. 10.
[Design Pattern] Lombok에서 발견한 디자인패턴 - Builder Pattern 안녕하세요. Lombok에 @Builder를 사용하면 객체 생성을 유연하게 할 수 있습니다. 이게 바로 빌더 패턴을 이용하는 건데요. 오늘은 이 빌터 패턴(Builder Pattern)에 대해서 알아보는 시간을 가져보도록 하겠습니다. Effective Java의 두번째 규칙의 제목이 바로 생성자의 인자가 많을 때는 빌더(Builder) 패턴을 이용하라라고 되어있습니다. 빌더 패턴을 사용하면 객체의 생성을 깔끔하고 유연하게 할 수 있습니다. 어떻게 달성할 수 있다는 것일까요? 오늘은 빌더 패턴을 이용하면 어떻게 이를 달성할 수 있는지 다른 방법들과는 어떻게 다른지 한번 알아보도록 하겠습니다. 기존 생성자의 문제점 일반생성자는 선택적인 파라미터가 많은 상황에서 코드의 길이가 길어진다는 단점을 가지고 있습니다.. 2021. 2. 25.
우선순위 큐(Heap)과 트리맵(Red black Tree)의 차이 안녕하세요. 오늘 여러분들과 이야기해볼 주제는 바로 우선순위 큐와 트리맵(TreeMap)의 차이점에 대해서 이야기 해보려고 합니다. 이전 포스팅을 보신 분들이라면 아시겠지만 일단 우선순위 큐는 Heap 자료구조를 이용하고 트리맵은 Red-Black Tree를 이용합니다. 둘 다 트리 구조를 가지고 있기 때문에 어떤 상황에서 어떤 자료구조를 사용해야할지 한번 보도록 하겠습니다. 우선순위 큐 PriorityQueue는 Heap 자료구조를 기반으로 되어있습니다. 먼저 Heap 자료구조란 무엇인지를 확인해보겠습니다. Heap 자료구조는 최솟값, 최댓값을 빠르게 찾기위해 완전 이진 트리를 사용하는 자료구조입니다. 간단히 개념을 설명드리면 최소힙의 경우 root 노드가 값이 제일 작으며 트리는 부모 노드는 자식 노.. 2021. 2. 18.
[자료구조] 코드로 알아보는 java의 PriorityQueue with Heap 안녕하세요. 오늘은 코드로 알아보는 java 시간압니다. 오늘 여러분들과 알아볼 Java의 자료구조는 PriorityQueue입니다. PriorityQueue는 우선순위 큐입니다. 우선순위 큐는 일반적인 FIFO 구조를 가지는 큐에 우선순위를 넣어 우선순위가 높은 노드부터 먼저가져올 수 있는 Queue입니다. Heap 자료구조 PriorityQueue는 Heap 자료구조를 기반으로 되어있습니다. 먼저 Heap 자료구조란 무엇인지를 확인해보겠습니다. Heap 자료구조는 최솟값, 최댓값을 빠르게 찾기위해 완전 이진 트리를 사용하는 자료구조입니다. 간단히 개념을 설명드리면 최소힙의 경우 root 노드가 값이 제일 작으며 트리는 부모 노드는 자식 노드보다 값이 작음을 항상 만족하는 트리입니다. 그리고 이렇게 H.. 2021. 2. 11.