README.md
·
CS/Data Structure
❒ Description자료구조가 무엇이고, 어떤 것들이 있는지 큰 틀을 알아보자.   ❒ 자료구조란?    ❒ 선형자료 구조데이터 구조가 선형이라는 것은 데이터 구조를 구성하는 요소들이 서로 인접해순차적인 방식으로 정렬되어 있음을 뜻한다.1. 배열  2. 연결 리스트연결 리스트는 데이터 엘리먼트의 선형 집합이지만 데이터의 순서가 메모리에 물리적인 순서대로 저장되지 않는다.이는 순서대로 저장되는 배열과의 가장 큰 차이점으로, 대신 동적으로 새로운 노드를 삽입하거나 삭제하기가 간편하며,연결 구조를 통해 물리 메모리를 연속적으로 사용하지 않아도 되기 때문에 관리도 쉽다. 탐색O(n)추가, 삭제, 추출O(1) 자바의 연결 리스트는 이중 연결 리스트이기 때문에 삽입,추출이 양방향으로 가능하다.  3. 스택스택은..
[LeetCode#121] Best Time to Buy and Sell Stock
·
Algorithm/문제풀이
❒ Description제목Best Time to Buy and Sell Stock링크https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/자료구조선형 자료구조풀 날짜07/24    ❒ Solutionpublic static int maxProfit(int[] prices) { int maxProfit = 0; int minPrice = prices[0]; for (int price : prices) { minPrice = Math.min(minPrice, price); maxProfit = Math.max(maxProfit, price - minPrice); } return..
[LeetCode#238] Product of Array Except Self
·
Algorithm/문제풀이
❒ Description제목Product of Array Except Self링크https://leetcode.com/problems/product-of-array-except-self/description/자료구조선형 자료구조푼 횟수7/23 이번 문제는 나누기를 하지말라는 제한 조건과 시간복작도 O(n)을 넘기지 말라는 요구사항이 있었다.   ❒ Solutionpublic static int[] solve(int[] nums) { int[] result = new int[nums.length]; int p = 1; for (int i = 0; i = 0; i--) { result[i] *= p; p *= nums[i]; } return result;}..
[LeetCode#15] 3Sum
·
Algorithm/문제풀이
❒ Description 제목3Sum링크https://leetcode.com/problems/3sum/description/자료구조선형 자료구조시간복잡도Two Pointer 풀이 - O(n²) 선형 자료구조 문제로, two pointer 알고리즘을 사용하여 해결할 수 있는 문제.이 문제는 중복 값에 대한 적절한 처리를 해줘야 하는 점이 까다로웠다. ❒ Solutionpublic static List> solve(int[] nums) { int left, right, total; List> res = new ArrayList(); Arrays.sort(nums); for (int i = 0; i 0 && nums[i] == nums[i - 1]) { continu..
Two Pointer
·
Algorithm/내용 정리
❒ DescriptionTrapping Rain water 문제를 풀면서 사용한 Two-Pointer 알고리즘에 대한 정리    ❒ Two Pointer 1. Two Pointer 알고리즘이란?주로 정렬된 배열에서 두 개의 Pointer를 사용하여 특정 조건을 만족할 때 까지 탐색하는 알고리즘이다.해당 알고리즘의 동작원리는 다음과 같다.초기화배열의 시작점 또는 특정 위치에 두개의 포인터를 배치. (일반적으로 시작과 끝에 배치)조건 검색 및 이동각 포인터가 가리키는 요소를 검사하여 조건을 만족하는지 확인한다.조건을 만족하지 않으면 포인터를 이동시킨다.종료 조건포인터가 배열의 끝에 도달하고나, 두 pointer가 교차할 때 반복을 종료한다.이때 원하는 결과를 얻었는지 확인한다. 2. 언제 사용하면 좋을까?주..
[LeetCode#42] Trapping Rain Water
·
Algorithm/문제풀이
❒ Description 제목Trapping Rain Water링크https://leetcode.com/problems/trapping-rain-water/description/자료구조선형 자료구조   ❒ Solution 1. Two Pointerpublic static int twoPointerSolve(int[] height) { int leftPointer = 0; int rightPointer = height.length - 1; int leftMax = height[leftPointer]; int rightMax = height[height.length - 1]; int water = 0; while (leftPointer    2. Stackpublic stat..
[LeetCode#1] Two Sum
·
Algorithm/문제풀이
❒ Description제목 : Two Sum링크 : https://leetcode.com/problems/two-sum/description/카테고리 : 선형 자료구조 중 배열 문제에 속한다.주어진 배열 중 2개의 요소의 합이 target이 될 때, 각 요소의 index를 return하는 문제   ❒ Solution 1. Brute Forcepublic static int[] solve1(int[] nums, int target) { int n = nums.length; for (int i = 0; i 시간 복잡도 : O(n²)모든 경우를 전부 확인하는 방법 2. Two-pass Hash Table▶︎ Two-pass Hash Table주로 두 번의 탐색을 통해 문제를 해결하는 알고리즘에서 ..
멀티 모듈 구조를 적용한 Monolithic 서버
·
Back-End/Architecture
❒ Description 이전 직장에서 진행했던 wewoot은 Monolithic 프로젝트였다. 물론 각 클래스 파일들은 각자의 역할에 맞는디렉토리에 위치해 있었다. 하지만 여기서 문제는 admin이 였는데, Admin-api와 Was-api가 섞여 있는 구조였다.이런 구조에서 admin을 배포하든, was를 배포하든 결국 프로젝트 내 모든 파일들을 대상으로 빌드가 이루어졌다. 위의 문제를 해결하기 위해 더 나은 설계가 있는지 찾아보다가 멀티 모듈이라는 것에 알게되었고, 해당 구조를wewoot에 적용을 하면 보다 나은 프로젝트 구조가 잡힐 것 같다는 생각이 들었다.  이번 기회에 궁금증들을 해결하고 아래의 내용들을 학습해 볼 예정이다.‣ 멀티모듈과 디렉토리의 차이는?‣ 멀티 모듈은 필수인가?‣ 구분 기준..
Junit5를 알아보자
·
Back-End/Setup & Configuration
❒ Description나의 경우 JUnit5를 회사에서 처음으로 사용하게 되었는데, "왜 JUnit5를 사용하지?" 에대해서 생각해보지 않았다.여태까지 그냥 너도 나도 JUnit5를 사용해서 나도 사용해왔다. 하지만 알고 쓰는 것과 모르고 쓰는 것엔 굉장히 큰 차이가있기 때문에 이번 기회에 JUnit5 정확히 뭔지, 왜 쓰는지, 해당 프레임워크를 사용하여 취할 수 있는 이점이 무엇인지, 다른 테스팅 프레임워크에는 뭐가 있는지 공부하고 알아보려고 한다. 더 나아가 직접 설정까지 하는 시간을 가져볼 것이다.     ❒ JUnit5 ?JUnit5는 이전 버전과는 다른 구성을 가지고 있다. 구성은 다음과 같다.JUnit5 = JUnit Platform + JUnit Jupiter + JUnit Vintage ..
Generic 제대로 알아보기.
·
Langauge/Java
❒ DescriptionJDK5 부터 Generic이 도입되었다. Generic의 도입으로 우리는 매번 명시적으로 작성해줘야 했던 Type-Check와Casting을 생략할 수 있을 뿐만 아니라, type-safe 한 좋은 코드를 작성할 수 있게 되었다. 이번 글에서는 Generic의기초 뿐만 아니라, 보다 더 깊게 이해하기 위해 Variance(변성), Synthetic, Reification(실체화) 관련 내용들도 함께정리하면서 공부해 볼 것이다.     ❒ Variance (변성)1. 변성이란?Variance refers to how sub-typing between more complex types relates to sub-typing between their components.(번역) Var..