이진 탐색과 요소 제거 알고리즘 실습
기초 개념
자료구조: 배열
알고리즘: 이진 탐색, 양방향 포인터(투포인터)
주요 오류 피하기 팁
변수의 활용을 최대한 활용하고, 목적에 맞게 명확하게 정의하세요.
조건 비교 연산자(==, !=)의 논리는 항상 명확히 처리하세요.
배열 인덱스 접근 시 범위를 초과하지 않도록 주의하세요. 특히 반복문의 종료 조건을 신중히 설정해야 합니다.
704. 이진 탐색 (Binary ...
9월 25일 00:48에 게시됨
알고리즘 문제 풀이: 제곱 정렬, 최소 부분 배열, 나선형 행렬
997. 정렬된 배열의 제곱 계산
입력된 비내림차순 정수 배열의 각 원소 제곱값을 오름차순으로 반환하는 문제입니다. 원소에는 음수가 포함될 수 있습니다.
무차별 대입 방식: 각 원소의 제곱을 계산한 후 Arrays.sort()로 정렬합니다.
양방향 포인터 방식: 제곱값이 가장 큰 값이 배열 양 끝에 위치한다는 특성을 활용합니다. 두 포인터를 배열 양 끝에 두고 비교하며 결 ...
8월 20일 05:50에 게시됨
자바에서 예외 처리와 실행 흐름 이해하기
프로그램이 예외를 처리하지 않으면 즉시 종료됩니다. 예외 처리는 예외 발생 시 대체 경로를 활성화하여 프로그램이 정상적으로 계속 작동하도록 보장하는 메커니즘입니다.
자바에서는 예외 처리를 위해 try, catch, finally 세 가지 블록을 사용합니다. 이 중 try와 catch는 반드시 함께 존재해야 하며, finally는 선택 사항이지만, 항상 실행되도록 설계되어 있습니다. ...
8월 1일 03:20에 게시됨
Java String 클래스 소스 코드 분석
Java String 클래스 소스 코드 분석
package java.lang;
코드 블록 1
public final class String
implements Comparable<String>, CharSequence {
// 1. 핵심 기본 배열: 문자열 각 문자 저장
private final char[] value;
// 2. 해시값 캐시, 기본값 0
private int hash;
// 기본 생성자: 빈 문자열 생성
public String() {
...
7월 31일 11:04에 게시됨
자바로 구현한 버블 정렬, 선택 정렬, 삽입 정렬
버블 정렬:
버블 정렬은 배열을 반복적으로 순회하며 두 개의 요소를 비교하고 필요에 따라 교환하는 과정을 통해 정렬을 수행합니다. 이 과정이 배열이 정렬될 때까지 계속됩니다.
특징: 비교적 안정적이며, 작은 크기의 배열에서 잘 작동합니다.
package sorting.example;
public class BubbleSortExample {
private static boolean validateArray(int[] array) {
...
7월 31일 10:38에 게시됨
상태 패턴과 전략 패턴, 어떻게 구분하고 선택해야 할까?
서론: 비슷해 보이지만 본질이 다른 두 디자인 패턴
소프트웨어 설계에서 상태 패턴(State Pattern)과 전략 패턴(Strategy Pattern)은 종종 혼동된다. 두 패턴 모두 인터페이스를 기반으로 다형성을 활용하며, UML 클래스 다이어그램 상으로는 거의 동일한 구조를 가진다. 그러나 이 둘은 추구하는 목적과 적용되는 시나리오가 근본적으로 다르다. 어떤 패턴을 선택하느냐 ...
7월 25일 06:01에 게시됨
스프링부트 3.x와 엘라스틱서치 8.x 통합 가이드
엘라스틱서치
Docker 배포
컨테이너 구성 (docker-compose.yml)
version: "3.1"
# 서비스 구성
services:
elasticsearch:
container_name: elasticsearch-8.8.1
image: docker.elastic.co/elasticsearch/elasticsearch:8.8.1
# 컨테이너 root 권한 부여 (보안에 취약하므로 실제 운영 환경에서는 제거)
privileged: true
# Linux의 ulimit ...
7월 21일 09:39에 게시됨
스프링 클라우드 슬루스: 분산 추적 도구
스프링 클라우드 슬루스 소개
스프링 클라우드 슬루스는 스프링 클라우드용 분산 추적 도구입니다. 이 도구는 Dapper, Zipkin, HTrace의 개념을 차용하여 개발되었습니다.
빠른 시작
스프링 부트 애플리케이션의 클래스패스에 슬루스를 추가하면(메이븐과 그래들 예제는 "프로젝트에 슬루스 추가" 참조), 요청을 로깅하는 경우 상관 데이터가 로그에 수집되는 것을 볼 수 ...
7월 15일 01:52에 게시됨
자바 스레드 풀의 원리와 활용
스레드 풀이란?
스레드 풀은 일종의 작업 스레드 관리 컨테이너로 이해할 수 있다. 애플리케이션이 시작될 때 미리 여러 개의 스레드를 생성하여 풀 안에 보관하고, 작업이 필요할 때마다 새로 스레드를 만들지 않고 이 풀에서 꺼내 사용한다. 작업이 끝나면 스레드는 다시 풀로 반환되어 다음 작업을 기다린다.
기존 방식의 문제점
자바 1.5 이전에는 각각의 작업마다 ne ...
7월 6일 22:41에 게시됨
디자인 패턴 - 싱글톤 패턴 완벽 이해하기
생성 패턴의 핵심 목표는 객체 생성 과정과 사용을 분리하는 것입니다. 이를 통해 시스템의 결합도를 낮추고, 사용자는 객체가 어떻게 생성되는지 알 필요 없이 사용할 수 있습니다.
생성 패턴의 종류는 다음과 같습니다:
싱글톤 패턴
팩토리 메서드 패턴
추상 팩토리 패턴
프로토타입 패턴
빌더 패턴
싱글톤 패턴이란?
싱글톤 패턴은 클래스의 인스턴스가 오직 하나 ...
7월 5일 04:46에 게시됨