본문 바로가기

기타113

[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.
[자료구조] 코드로 알아보는 java의 TreeMap 안녕하세요. 오늘은 코드로 알아보는 java의 자료구조 시간입니다. 오늘 알아볼 자료구조는 TreeMap입니다. 바로 그러면 알아보도록 하겠습니다. TreeMap 기본적으로 TreeMap은 내부의 값들을 key 값을 기준으로 정렬하여 가지고 있습니다. 정렬된 순서를 알 수 없는 HashMap과는 차이가 있습니다. 아래 예제 코드를 한번 보도록 하겠습니다. @Test public void treeMapTest() { TreeMap map = new TreeMap(); map.put(3, "val"); map.put(7, "val"); map.put(8, "val"); map.put(9, "val"); map.put(10, "val"); map.put(11, "val"); map.put(12, "val");.. 2021. 1. 20.
[spring + 객체 지향 원칙] Spring에서의 의존성 역전의 원칙(Dependency Inversion Principle) 안녕하세요. 오랜만에 포스팅을 올리게 되네요. 새해가 되서 책한권 읽어야지 했는데... 생각보다 오래 걸렸습니다. 그 책을 다 읽고 이제 포스팅을 하려고 합니다. 아쉽지만 책과 관련된 내용은 아닙니다. 책을 읽다가 이거 포스팅하면 좋겠다 싶었던 부분이 있었거든요. 오늘 여러분들께 알려드릴 것은 객체 지향 5가지 원칙 중 하나인 의존성 역전의 원칙(Dependency Inversion Principle)입니다. 사실 객체 지향의 5가지 원칙에 대해서는 2년정도 전에 한번 일괄적으로 포스팅을 했었습니다. 해당 원칙에 대해서 생소하신 분들은 객체지향 설계의 5가지 원칙 S.O.L.I.D 포스터를 참고해주시면 도움이 될 것입니다. 오늘은 java Spring을 사용할 때의 예를 들어 DIP에 대해서 좀 더 이해.. 2021. 1. 10.
[UNIT-TEST] Webflux Reactor 유닛 테스트 하기 안녕하세요. 오늘은 여러분들과 함께 알아볼 내용은 Webflux에서 채택하고 있는 Reactive Stream 프로젝트인 Reactor를 유닛 테스트하는 방법입니다. Reactive Stream의 경우 기존의 일반적인 로직과 다르게 Publisher(생산)와 Subscriber(구독)로 나누어져 있으며 각각이 서로를 의식하지 않은채 약한 결합으로 돌아갑니다. 그렇기 때문에 기존 우리가 짜던 구성으로는 테스트가 쉽지 않습니다. 따라서 테스팅을 용이하게 하기위한 구성 방법 및 테스팅 방법에 대해서 오늘 여러분들과 함께 공유하고자 합니다. 이번 포스팅에서 테스팅 프레임워크로 Spock을 사용하도록 하겠습니다. JUnit 5와 Reactor 테스팅 방법의 차이는 없으므로 동일하게 사용하셔도 좋습니다. 의존성 w.. 2020. 12. 17.
[자료구조] 코드로 알아보는 java의 EnumMap 안녕하세요. 오늘은 코르로 알아보는 java의 자료구조 시간으로 돌아왔습니다. 오늘 여러분들께 소개시켜드리고자 하는 자료구조는 EnumMap입니다. 이름에서 알 수 있듯이 Enum을 Key로 하는 자료구조인데요. HashMap을 평소에 사용하다 Sonar Lint의 정적분석에서 Enum을 Key로 사용한다면 EnumMap을 사용하는 것을 추천하기에 저도 EnumMap의 존재를 알게 되었습니다. 오늘은 제가 EnumMap 자료구조를 사용한 상황과 EnumMap은 HashMap과 어떻게 다른지 알아보는 시간을 가져보도록 하겠습니다. 문제의 상황 아래 소스는 제가 진행하고 있는 프로젝트의 코드 중 일부입니다. Game에 여러 Review를 남길 수 있도록 DB의 구조가 되어있습니다. 여기서 아래 메서드는 Re.. 2020. 12. 6.
[java/Design Pattern] 싱글톤의 Early 초기화 안녕하세요. 이전시간에 저희들은 싱글톤의 Lazy 초기화에 대해서 알아보는 시간을 가졌었습니다. 포스팅에서 싱글톤 객체의 초기화 시점에는 Lazy와 Early가 있다고 말씀드렸었는데요. 오늘은 Eager 시점의 초기화에 대해서 알아보는 시간을 가져보도록 하겠습니다. 먼저 저번 포스팅에서 말씀드린 객체 초기화 방법에 대해서 다시한번 보겠습니다. Eager initialization: 클래스 인스턴스 생성을 실제로 사용되기전에 먼저 진행 Static block initialization Enum singleton Lazy initialization: 클래스 인스턴스의 생성을 처음 실제로 사용될 때 진행 Thread safe singleton Bill Pugh singleton Eager initializat.. 2020. 11. 29.
[java/Design Pattern] 싱글톤의 Lazy 초기화 안녕하세요. 오랜 만에 여러분들과 Design 패턴에 대해서 알아보는 시간을 가져보려고 합니다. 이전에 저희들은 Singleton 패턴에 대해서 [Spring & Design Pattern] Spring에서 발견한 디자인패턴_Singleton Pattern 시간에 알아본적이 있습니다. 그때 Singleton을 초기화 할때 아래와 같은 코드로 초기화를 진행했습니다. 하지만 사실 이렇게 초기화 하는 것은 문제점을 안고 있습니다. public class Government { private static Government government; private Government() {} public static Government election() { if(government == .. 2020. 11. 28.