
1. 기존 코드 문제 발생 (첫 번째 문제)https://programming-tree.tistory.com/145 Spring에서 Elasticsearch로 검색 성능 최적화하기1. Elasticsearch가 LIKE 검색보다 나은 이유기존 RDBMS에서는 문자열 검색을 위해 LIKE '%검색어%'를 자주 사용한다. 그러나 이 방식에는 다음과 같은 문제가 있다.오타 허용 불가사용자가 "강아지" 대신programming-tree.tistory.com저번 글을 쓸 때만 해도 nori와 n-gram이 없어도 되지 않을까 생각했다. 한국어 검색이라고 해도 단순 standard analyzer와 Fuzzy 정도로 충분하지 않을까 싶었다. 그런데 막상 여러 데이터를 예로 들어 테스트해보니, 예를 들어“강아지잠옷”..

1. Elasticsearch가 LIKE 검색보다 나은 이유기존 RDBMS에서는 문자열 검색을 위해 LIKE '%검색어%'를 자주 사용한다. 그러나 이 방식에는 다음과 같은 문제가 있다.오타 허용 불가사용자가 "강아지" 대신 "강이지"로 검색하면 매칭되지 않는다.부분 검색 제한LIKE로 부분 문자열은 찾을 수 있지만, 접두어(Prefix)나 접미어, 중간 문자열 등 원하는 형태로 세분화하기 어렵다.공간(Geo) 검색 미지원위도·경도 기준으로 특정 지역만 검색하기가 쉽지 않다. 보통 BETWEEN을 써야 하지만 대규모 데이터에서 성능이 좋지 않다.대규모 데이터 성능 저하LIKE '%검색어%'는 인덱스를 제대로 활용하기 어려워 데이터가 커질수록 매우 느려진다.이와 달리 Elasticsearch는 역색인(In..
📍 문제 탐색하기크기가 H × W인 모눈종이와 N개의 스티커가 있다.각 스티커는 Ri × Ci 크기이며, 스티커 2개를 겹치지 않게 붙이려고 한다.스티커는 90도 회전이 가능하며, 종이를 벗어나서는 안 된다.두 스티커가 차지하는 넓이의 최댓값을 구해야 한다.📋 문제 조건1 ≤ H, W, N ≤ 1001 ≤ Ri, Ci ≤ 100스티커의 변은 모눈종이의 선과 일치해야 한다.스티커끼리 겹치는 것은 불가능하지만, 접하는 것은 가능하다.두 스티커를 붙일 수 없으면 0을 출력한다.⏱️ 시간 복잡도 고려브루트포스 접근:두 개의 스티커를 선택하고, 각각을 회전시키는 모든 경우를 탐색해야 한다.최대 경우의 수:스티커 선택: 약 5,000쌍 (100C2)각 스티커당 2가지 회전 → 총 4가지 경우최대 20,000번 ..
📌 문제 분석한글 프로그램의 메뉴 옵션에서 각 옵션에 단축키를 설정하는 문제이다. 단축키는 다음의 규칙에 따라 지정해야 한다.우선 순위:각 옵션의 단어에서 첫 글자를 단축키로 설정할 수 있는지 확인한다.만약 첫 글자가 이미 단축키로 지정되었다면, 단어의 나머지 문자들 중 사용 가능한 문자를 찾아 설정한다.대소문자를 구분하지 않는다.모든 글자를 시도해도 단축키를 지정할 수 없다면 그대로 둔다.입력 조건:옵션 개수 N (1 ≤ N ≤ 30)각 옵션은 최대 5개의 단어, 각 단어는 최대 10개의 알파벳으로 구성됨.공백을 기준으로 단어를 구분.출력 조건:단축키로 지정된 글자는 [ ] 괄호로 감싸서 출력.📌 문제 해결 전략입력 처리:옵션 개수를 입력받고, 각 옵션 문자열을 리스트로 저장.단축키 지정 과정:이미..
📍 문제 탐색하기동근이는 직사각형 모양의 블록 경계를 따라 상점의 위치로 이동해야 한다. 블록 중간을 가로질러 갈 수 없기 때문에, 블록의 가장자리를 따라 시계 방향 또는 반시계 방향으로만 이동해야 한다.주어진 상점들과 동근이의 위치를 기준으로, 최단 거리의 합을 계산하는 것이 목표이다.문제 조건 분석입력 조건첫째 줄: 블록의 가로 길이 w와 세로 길이 h둘째 줄: 상점의 개수 n이후 n개의 줄: 상점의 위치 (방향, 거리)마지막 줄: 동근이의 위치 (방향, 거리)방향 정보 (1~4)1: 블록의 북쪽 (북쪽 기준 왼쪽에서의 거리)2: 블록의 남쪽 (남쪽 기준 왼쪽에서의 거리)3: 블록의 서쪽 (서쪽 기준 위쪽에서의 거리)4: 블록의 동쪽 (동쪽 기준 위쪽에서의 거리)가능한 해결 전략블록을 일직선으로 펼..

📍 문제 탐색하기프로그래밍 대회 전날, 은상과 친구들은 술집에서 주어진 막걸리 주전자를 최대한 동일한 양으로 나눠 마시려고 한다.주어진 막걸리를 K명의 사람에게 똑같은 양으로 나눌 때, 최대 용량(ml)을 구하는 것이 목표이다.문제 조건 분석입력 조건첫 번째 줄:N (막걸리 주전자의 개수, N≤10,000)K (사람의 수, K≤1,000,000 )두 번째 줄부터: 각 주전자의 용량 (자연수, 최대 2^31 - 1)출력 조건나눠줄 수 있는 최대 막걸리 용량(ml) 출력가능한 문제 해결 전략완전 탐색 (Brute Force)1ml부터 최댓값까지 모든 용량을 시도하는 방법 → 시간 초과 가능성 높음시간 복잡도: O(K×N)이분 탐색(Binary Search) 적용 (최적 해법)가능한 용량 범위를 설정하고 이..

📍 문제 탐색하기양의 정수 A에서 K로 변경하는 최소 연산 횟수를 구하는 문제입니다.사용할 수 있는 연산은 다음 두 가지입니다:연산 1: 현재 수에 1을 더한다. → A=A+1연산 2: 현재 수에 2를 곱한다. → A=A×2목표:정수 A에서 시작하여 K로 만들기 위한 최소 연산 횟수를 출력한다.문제 조건1≤A최소 연산 횟수를 찾기 위해 최적의 경로 탐색이 필요함.연산이 빠르게 수행되도록 효율적인 방법 필요.가능 시간 복잡도완전 탐색(브루트포스): O(2^N) → 시간 초과 가능성.BFS(너비 우선 탐색): O(N) → 최적해 보장.역방향 탐색(탑다운 방식): O(logN) → 효율적인 방식.📍 코드 설계하기이 문제를 해결하기 위해 탑다운 방식(역방향 탐색)을 적용했다.K에서 A로 거꾸로 접근하여 연..
📍 문제 탐색하기용액 문제는 주어진 용액들 중 두 개의 용액을 선택하여 특성값의 합이 0에 가장 가까운 조합을 찾는 문제입니다.입력으로 주어진 용액들은 이미 오름차순 정렬되어 있으며, 음수와 양수로 구성되어 있을 수도 있습니다.이 문제의 목표는 시간 복잡도를 줄이기 위해 투 포인터(Two Pointers) 기법을 사용하여 빠르게 해결하는 것입니다.문제 조건용액의 개수 N: 2≤N≤100,000용액의 특성값 범위: −1,000,000,000≤ai≤1,000,000,000입력 데이터 특징:오름차순 정렬되어 주어짐.중복된 특성값이 없음.산성 용액과 알칼리성 용액만으로도 조합 가능.가능한 시간 복잡도브루트포스(완전 탐색): O(N^2)→ N이 최대 100,000이므로 시간 초과.투 포인터(Two Pointe..
- Total
- Today
- Yesterday
- EnumType.ORDINAL
- 백준 파이썬
- 커뮤니티
- 파이썬
- 비영속
- 로그아웃
- 스프링 커뮤니티
- 스프링 북마크
- 회원탈퇴
- SQL
- 지연로딩
- 웹 MVC
- SQLD
- 로깅
- 자바
- 웹MVC
- 백준
- 스프링부트
- 다이나믹 프로그래밍
- 북마크
- SQL 레벨업
- 프론트엔드
- DP
- 영속
- elasticsearch
- 준영속
- 인텔리제이
- JPA
- 스프링
- 자바 스프링
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |