분류 전체보기 319

추석 트래픽 [자바]

🧫 문제 분석✔️ 출처추석 트래픽 level 3📖 문제 로그로 주어지는 시간대를 파싱해서 각각의 요청 시간과 완료 시간을 구해서요청 시간 기준으로 로그들을 정렬한 다음 [요청 시간, 요청시간 + 1초] ,[요청완료시간, 요청완료시간 + 1초] 두 범위 안에 드는 모든 로그들을 카운팅한다. 시간이 소숫점 단위로 나오므로 항상 정수형으로 바꿔주자부동소수 오차 때문에 정확한 비교가 불가능하다. 여기서는 ms 단위로 다 변경하였다. 이로써 정렬도 쉽고 파싱도 어렵지 않다. 🔅 문제 풀이import java.util.*;class Solution { // 시작 지점 + 1초, 끝지점 + 1초 범위 안에 들어오는 모든 로그들 탐색 public int solution(String[] l..

GC 로그 찍어서 분석해보기

GPT의 도움을 받아 공부하였다. 먼저 GC 로그를 찍기 위해 vm 옵션에 아래의 값을 추가하자// 초기메모리, 최대 메모리 , 로그 옵션-Xms512m -Xmx512m -Xlog:gc*:file=gc.log Mixed GC를 경험해보자 import java.util.ArrayList;import java.util.List;public class MemoryLeakTest { private static final List LEAK = new ArrayList(); public static void main(String[] args) throws Exception { System.out.println("Start Leak Test"); long l = System...

JAVA 2025.11.24

G1 GC

G1 의 출시 배경기존 Parallel / CMS 한계로 인해 만들어짐핵심은 긴 STW 시간CMS의 메모리 단편화, 이로인한 pause 시간 예측 불가 한마디로 (긴 STW, 단편화)를 해결하기 위해 출시된 GC이다.목표는 Pause time을 예측 가능하게 하는 것이다. G1 GC의 핵심 아이디어기존 Young/Old 세대 구조를 고정하지 않음 Heap 전체를 균일한 Region으로 분리크기 : 1~32MB정도 finxed-size regionYoung / Survivor / Old / Humongous 등을 region 단위로 동적으로 구성 Garbage-First(G1) 전략Garbage가 가장 많은 Region부터 회수 Concurrent marking(병렬 마킹) + Copying compac..

JAVA 2025.11.24

없어진 기록 찾기 [MYSQL]

🧫 문제 분석✔️ 출처없어진 기록 찾기📖 문제 간단한 문제인데 서브 쿼리로도 풀 수 있어서 작성했다.조인후 보호소에 들어온 ANIMAL_INS의 ANIMAL_ID가 NULL 이면 해당 동물이 문제에서 원하는 유실된 동물이다. 🔅 문제 풀이 [OUTER JOIN]SELECT AO.ANIMAL_ID, AO.NAMEFROM ANIMAL_INS AI RIGHT JOIN ANIMAL_OUTS AO ON AI.ANIMAL_ID = AO.ANIMAL_IDWHERE AI.ANIMAL_ID IS NULLORDER BY AO.ANIMAL_ID ASC;🔅 문제 풀이 [SUBQUERY EXISTS]SELECT AO.ANIMAL_ID, AO.NAMEFROM ANIMAL_OUTS AO WHERE NOT EXISTS (..

programmers 2025.11.23

GC (Garbage Collection)

GC란?힙 영역의 자바 객체중 사용하지 않거나 참조하지 않은 객체를 처리(쓰레기 수집)하는 프로세스이다. Stop-the-world(STW)란?GC가 안전하게 메모리를 조작하기 위해 모든 애플리케이션 스레드를 일시 정지 시키는 것즉, GC에 집중하는 것이다. mark-sweep-compact란?GC 대상 객체를 식별(mask), sweep(제거), compact(압축)compact를 하는 이유는 메모리 단편화를 없애기 위해서이다. GC가 Root Space로부터 그래프 순회를 통해 연결된 객체들을 찾아 마킹하고 그외를 sweep한다음 compact한다.GC의 종류Serial GCYoung GC : stop-the-world 후 single Thread로 mark-copy(Survivor or Old 영..

JAVA 2025.11.21

공간 데이터 인덱스 추가

행정동 데이터의 geom을 이용해 ST_Contains로 특정 POINT가 포함되어있는지 확인하였다. 그러다 문뜩 이게 인덱스를 타는지 궁금하여 실행계획을 봤더니..explain select idFROM region_dongWHERE ST_Contains( geom, ST_SRID(POINT(126.9780, 37.5665), 4326)); type ALL 즉, 풀스캔을 때려버렸다.왜인지 궁금해서 찾아보았다. 1. SRID 불일치이는 SELECT ST_SRID(geom)로 확인해본 결과 4326으로 잘 저장되어있다. 2. 공간 인덱스 미생성-> 이거다.. 공간데이터라서 mysql 단에서 자동으로 인덱스를 생성해주는줄 알았다. 아래 쿼리를 날려서 공간데이터 인덱스를 생성해주었다. 이로써 R-Tre..

Back-End/DB 2025.11.20

모두 0으로 만들기 [자바]

🧫 문제 분석✔️ 출처모두 0으로 만들기 level 3📖 문제 dfs로 푸니 메모리 제한사항이 빡빡해서 6,7번에서 런타임 예외 (stackoverflow)가 터졌다.변수를 static으로 선언, iterator를 사용하지 않는 일반for문 사용 우선 트리에서 가중치가 가장 작은 노드를 기준으로DFS 탐색해서 리프노드부터 값을 넘기면서 연산 횟수를 카운팅하면된다. 그리고 특정 상황 즉, 모두 0이거나, 불가능한 경우는 미리 처리한다. a의 모든 합이 0이 아니면 절대로 모든 정점의 가중치를 0으로 만들 수 없으므로 바로 -1 반환 a의 모든 요소가 0이면 0 반환 재귀를 통한 dfs 말고 stack으로 dfs를 구현하면 더 안정적일 것 같다. 🔅 문제 풀이import java.util.*;cla..

programmers/Lv 3 2025.11.20

봉인된 주문 [자바]

🧫 문제 분석✔️ 출처봉인된 주문 level 3📖 문제 설계는 잘했는데 구현이 조금 어려웠다. 1. 일단 bans을 무시하고 전체 주문서를 규칙순서대로 뒀을때 n번째 주문서를 찾는다.2. n번째 주문서보다 사전 순서가 앞서는 bans 주문서가 있다면 개수를 카운트한다.3. 2번에서 카운트한 개수만큼 n = n + cnt로 갱신하고 다시 2번을 진행한다.4. 카운트가 0이라면 ban을 모두 적용한 n번째 주문서이므로 반환한다. 예시에서 30번째 주문서를 찾는데ban을 적용하지 않고 주문서를 규칙에 따라 정렬했을 때 30번째는 "ad" 이다.그런데 그 중에 ban 문자 d, e, aa, ae 가 있으므로 이 문자들은 건너뛰고 순서를 할당했을 것이다.ban을 적용하면 해당 4개의 문자만 넘어가면되니 n +..

programmers/Lv 3 2025.11.19

조건에 맞는 사용자 정보 조회하기 [MYSQL]

🧫 문제 분석✔️ 출처조건에 맞는 사용자 정보 조회하기📖 문제 살짝 고민했던 SQL문제 매우 재밌고 흥미롭다.첫 번째로 중고 거래 게시물을 3건 이상 등록한 사용자를 필터링해야한다.서브 쿼리로 작성자 ID 를 그룹핑후 HAVING절에서 COUNT로 작성 글이 3개 이상인 WRITER_ID를 구한다. IN절로 서브쿼리에서 구한 WRITER_ID 중에서 중고 거래 이용자의 ID값이 있다면,해당 유저는 중고 거래 게시글을 3건 이상 등록한 사용자이다. 이부분만 잘 파악하면 쉽게 해결 가능하다. 🔅 문제 풀이-- UGB 와 UGU 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자ID, 닉네임, 전체 주소, 전화번호를 조회-- 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력-- 전화번..

programmers 2025.11.18