728x90

Java 177

[Grind75-LeetCode] Time Based Key-Value Store JAVA

[Grind75-LeetCode] Time Based Key-Value Store - Medium접근이진 탐색객체풀이시간을 베이스로 한 Key-Value 형식의 맵을 구현하는 문제이다. String 값으로 주어지는 Key가 있고 int 타입의 timestamp와 String 타입 value가 있다. 구현해야 할 TimeMap은 set, get 두 가지 메서드를 가지고 있으며 구현해야 할 오늘의 목표이다.  TimeMap의 작동 방식은 다음과 같다. Key와 Value 형태로 저장하는 Map과 동일하나 Key에 해당하는 Value에는 timestamp가 있다 즉 시간대별로 저장된 값을 따로 분리해야 한다. 한 Key에는 여러 timestamp가 존재하고 timestamp 마다 각각의 Value를 가지고 있..

[Spring] ProxyFactory

ProxyFactory스프링 프레임워크에서 프록시 객체를 생성하는 데 사용되는 유틸리티 클래스두 가지 종류의 프록시 생성 방법을 추상화하여 제공JDK 프록시: 인터페이스 기반CGLIB 프록시: 클래스 기반구성 요소target프록시가 감쌀 실제 객체ProxyFactory 생성 시 생성자로 넘기거나 setTarget을 통해 지정 가능//생성자ProxyFactory proxyFactory = new ProxyFactory(new HelloImpl());//setTargetProxyFactory proxyFactory = new ProxyFactory();proxyFactory.setTarget(new HelloImpl());  Advice프록시가 메서드 호출 시 실행할 로직실행 전 후 등 추가 로직이 구현되는..

백엔드/Spring 2024.11.06

[Grind75-LeeCode] Lowest Common Ancestor of a Binary Tree JAVA

[Grind75-LeeCode] Lowest Common Ancestor of a Binary Tree - Medium접근dfs풀이이진트리에서 최저 공통 조상 노드를 찾는 문제이다. 이전에 거의 흡사한 문제를 풀었던 적이 있다.2024.10.08 - [알고리즘/코딩테스트-Grind75] - [Grind75-LeetCode] Lowest Common Ancestor of a Binary Search Tree JAVA [Grind75-LeetCode] Lowest Common Ancestor of a Binary Search Tree JAVA[Grind75-Leetcode] Lowest Common Ancestor of a Binary Search Tree - EasyLowest Common Ancestor..

[Spring] 동적 프록시

JDK 동적 프록시런타임 시 인터페이스를 구현하여 프록시 객체를 생성하는 기술 특정 로직이 같고 호출하는 메서드만 다른 경우 프록시 클래스를 직접 각각 작성할 필요 없이 동적으로 생성구성 요소InvocationHandler (Interface): 프록시 객체가 호출할 메서드에 대한 처리를 정의 java.lang.reflect.Proxy: 동적 프록시 객체를 생성하는 클래스사용 방법InvocationHandler 인터페이스를 상속받아 invoke 메서드를 구현invoke 메서드 내 프록시 객체가 처리할 로직을 구현Method의 invoke를 통해 프록시 객체에서 실제 객체로 요청을 전달Proxy.newProxyInstance() 동적 프록시 객체 생성첫 번째 파라미터로 인터페이스를 불러올 클래스로더를 전달..

백엔드/Spring 2024.11.05

[Grind75-LeetCode] Merge Intervals JAVA

[Grind75-LeetCode] Merge Intervals - Medium 접근구현풀이2차원 배열로 구간이 주어지면 겹치는 구간을 합쳐 반환하는 문제이다. 이전에 풀었던 구간 삽입 문제와 비슷한 듯 다른 문제이다. intervals = [[1,3],[2,6],[8,10],[15,18]] -> intervals = [[1,6],[8,10],[15,18]]1~3 + 2~6 병합 -> 1~6위와 같이 구간이 들어있는 배열이 존재할 때 겹치는 범위를 병합하여 병합된 배열을 반환하는 문제이다. 내가 풀었던 방법을 먼저 설명하고 더 성능이 좋았던 다른 코드를 몇 개 들고 와 분석할 예정이다. public int[][] merge(int[][] intervals) { List result = n..

[Grind75-LeetCode] Combination Sum JAVA

[Grind75-LeetCode] Combination Sum - Medium접근dfs풀이주어지는 정수 배열의 요소들을 사용해 target을 만들 수 있는 모든 조합을 구하는 문제이다. 배열에는 중복된 원소가 존재하지 않고 각 요소를 무한히 사용이 가능하다. 전에 풀었던 동전 문제와 유사하나 이번에는 최소 개수를 구하는 것이 아닌 모든 조합을 구해야 하므로 dfs를 사용해 풀어주었다.  public List> combinationSum(int[] candidates, int target) { List> result = new ArrayList(); List ls = new ArrayList(); dfs(candidates, target, 0, ls, result..

[Grind75-LeetCode] Search in Rotated Sorted Array JAVA

[Grind75-LeetCode] Search in Rotated Sorted Array - Medium접근이진 탐색 (Binary Search)풀이배열 내부에 순환이 있는 정렬된 배열에서 특정 원소를 찾아 인덱스를 반환하는 문제이다. 해당 문제는 O(log n)의 시간 복잡도를 가진 알고리즘으로만 통과가 가능하다. 대표적인 탐색 알고리즘에서 범위를 절반씩 줄여가며 진행하는 이진 탐색이 O(log n)으로 이 문제도 이진 탐색을 통해 해결된다.  이 문제의 포인트는 주어지는 배열이 단순하게 정렬된 배열이 아니라는 것이다. 정렬되어 있긴 하지만 내부에 순환점이 존재해nums = [4,5,6,7,0,1,2]위와 같은 형태로 0번 인덱스가 제일 작은 값이 아니고 마지막 인덱스가 제일 큰 값이 아닌 상태로 주어..

[Grind75-LeetCode] Rotting Oranges JAVA

[Grind75-LeetCode] Rotting Oranges - Medium접근bfs풀이썩은 오렌지 옆에 있는 오렌지는 1분이 지날 때마다 썩어가고 모든 오렌지가 다 썩기까지 걸리는 시간을 구하는 문제이다. 백준의 토마토 문제와 동일한 문제로 일이 분으로 각 과일의 상태를 나타내는 값이 조금씩 달라졌을 뿐 다른 게 없는 문제이다.2024.09.29 - [알고리즘/코딩테스트-백준] - [백준] 토마토 JAVA [백준] 토마토 JAVA[백준] 토마토 - GOLD V 7579, 7576번7576번: 토마토 (acmicpc.net)7569번: 토마토 (acmicpc.net)접근bfs풀이토마토 농장에는 덜 익은 토마토와 다 익은 토마토가 존재하는데 덜 익은 토마토가 다 익은 토마토 옆kwang2134.tisto..

[Spring] Thread Pool & ThreadLocal

Thread Pool여러 개의 쓰레드를 미리 생성해 두고 작업이 필요할 때 생성된 쓰레드 중 하나를 재사용하여 작업을 수행하는 패턴작업 수행마다 매번 쓰레드를 생성하지 않기 때문에 쓰레드 생성, 소멸에 발생하는 오버헤드를 줄일 수 있음특징미리 생성된 쓰레드를 재사용하여 생성 비용을 줄임 쓰레드 수를 제한하여 시스템 자원을 효율적으로 관리여러 개의 쓰레드를 사용하여 비동기 작업 처리 가능Core Pool Size & Maximum Pool Size Core Pool Size: 쓰레드 풀에서 최소한으로 유지하는 쓰레드 수Maximum Pool Size: 쓰레드 풀에서 가질 수 있는 최대 쓰레드 수동작 방식:작업이 들어오면 Core Pool Size까지는 새 쓰레드를 생성Core Pool Size 도달 후에는..

백엔드/Spring 2024.10.30

[Grind75-LeetCode] Product of Array Except Self JAVA

[Grind75-LeetCode] Product of Array Except Self - Medium접근누적곱풀이주어지는 정수 배열에서 각 인덱스 값을 제외한 나머지 값의 곱을 배열 형태로 반환하는 문제이다. 2중 for문을 사용해 현재 인덱스를 제외한 나머지를 곱하면 되는 간단한 문제이지만 조건으로 O(n)의 시간 복잡도를 만족하는 코드를 제출해야 하기에 다른 방법을 선택해야 한다. 비슷한 형태의 값을 더하는 문제에서 사용했던 누적합 방식을 곱하기로 가능한지 찾아봤다. 당연하게도 누적곱 방식이 존재했고 이 문제는 누적곱 방식으로 O(n) 시간 복잡도를 만족하며 풀 수 있다. 누적곱이란 배열의 요소를 순차적으로 곱해나가는 방식이다. 누적곱을 만드는 방식은 누적곱 배열의 인덱스에 들어있는 값과 원본 배열의..

728x90