본문 바로가기

728x90

분류 전체보기

(405)
[Spring Boot] Snake Case JSON 변환 전체 설정하기 Spring에서는 Java 클래스 필드가 기본적으로 camelCase로 지정되어 있으며, 이는 프론트엔드에서 주로 사용하는 snake_case와 다른 형식입니다.예를 들어, 아래와 같은 필드가 있다고 가정해 봅시다:// Java (Back-end)String userName;// JavaScript (Front-end)let user_name; 이와 같은 형식 차이는 Spring으로 클라이언트 데이터를 주고받을 때 자동으로 매핑되지 않아, 프론트엔드와 백엔드 간에 불필요한 변환 작업을 발생시킵니다.1. @JsonNaming을 이용한 수동 매핑특정 클래스에서만 snake_case 변환을 적용하려면 @JsonNaming 애노테이션을 사용할 수 있습니다:import com.fasterxml.jackson.da..
[백준] 1, 2, 3 더하기 문제 흐름문제 목표숫자 n이 주어졌을 때, 숫자 1, 2, 3을 사용해 그 합이 n이 되는 모든 경우의 수를 계산합니다.입력 및 출력 설명여러 테스트 케이스에 대해 각각의 숫자 n을 입력받고, 각 경우에 대해 결과를 출력합니다. 핵심 아이디어동적 프로그래밍(DP)현재 숫자 i를 만들기 위해 마지막에 추가하는 숫자가 1, 2, 또는 3일 때의 경우를 합산합니다.점화식: arr[i] = arr[i-1] + arr[i-2] + arr[i-3]여기서 arr[i]는 숫자 i를 만드는 경우의 수를 나타냅니다.이 문제는 미리 계산된 DP 배열에서 결과를 빠르게 조회하는 방식으로 해결할 수 있습니다. 알고리즘 흐름DP 배열 초기화arr[0]=1로 초기화합니다.배열을 통해 1부터 10까지의 결과를 미리 계산합니다.DP ..
[Spring Boot] 멀티 모듈 설정하기 Spring Boot에서 멀티 모듈 설정을 구성하는 것은 대규모 애플리케이션을 모듈화하여 코드 관리와 재사용성을 높이는 데 유리합니다. 멀티 모듈 구조를 활용하면 프로젝트를 독립적인 하위 모듈로 분리할 수 있어 유지보수와 협업이 수월해집니다. 다음은 Spring Boot에서 멀티 모듈 설정하는 방법과 추가 설명입니다.  멀티 모듈이란?멀티 모듈은 하나의 루트 프로젝트 내에 여러 하위 모듈(서브 모듈)을 포함하는 프로젝트 구조입니다. 루트 프로젝트의 build.gradle 파일에서 전체 프로젝트 설정을 관리하고, 하위 모듈은 각각의 독립적인 빌드 설정을 가지면서도 상위 모듈과 연계할 수 있습니다. 각 모듈은 독립적으로 개발 및 테스트가 가능하며, 필요에 따라 상호 참조할 수 있습니다.멀티 모듈의 장/단점장..
[백준] 연속합 (1912번) 문제 흐름문제 목표주어진 배열에서 연속된 부분 수열의 최대 합을 구하는 문제입니다.이 문제는 동적 프로그래밍을 이용하여 해결할 수 있습니다.입력 설명첫 줄에 정수 N (배열의 크기)를 입력받습니다.다음 줄에 N개의 정수 (각 원소의 값)를 입력받습니다.출력 설명연속된 부분 수열의 최대 합을 출력합니다. 핵심 아이디어동적 프로그래밍(DP):현재 원소까지의 최대 합을 계산하면서 최댓값을 갱신합니다.배열의 각 원소를 순회하면서, 이전 원소와 현재 원소를 합치는 것이 더 큰 경우에 업데이트합니다.위 알고리즘을 카데인 알고리즘이라고 합니다.점화식:dp[i]는 dp[i-1] + arr[i] (현재 원소를 포함한 최대 합)과 arr[i] (현재 원소만) 중 큰 값을 선택합니다. 알고리즘 흐름입력 처리배열의 크기 N과..
[자료구조] 여러가지 배열 종류 1. 기본 배열 (Array)정의: 동일한 타입의 요소가 고정된 크기로 연속된 메모리 공간에 저장된 자료구조입니다.특징:고정 크기: 배열의 크기는 선언 시 고정되며 변경할 수 없습니다.빠른 접근: 인덱스 값으로 각 요소에 O(1) 시간 복잡도로 접근 가능.메모리 효율성: 연속적인 메모리 공간을 사용하여 메모리 접근이 빠릅니다.용도: 크기가 변하지 않는 데이터 집합을 저장할 때 유용합니다.int[] numbers = {1, 2, 3, 4, 5};System.out.println("첫 번째 요소: " + numbers[0]); // 1System.out.println("세 번째 요소: " + numbers[2]); // 3  2. 동적 배열 (Dynamic Array)정의: 크기를 동적으로 조정할 수 있는 ..
[알고리즘] 경우의 수 1. 곱의 법칙 (Multiplication Rule)정의: 두 개 이상의 사건이 순서대로 발생할 때, 각 사건이 일어날 수 있는 경우의 수를 곱한 값이 전체 경우의 수가 됩니다.수식:만약 사건1이 일어날 수 있는 경우의 수가 N가지이고, 사건2가 일어날 수 있는 경우의 수가 M가지라면, 두 사건이 연속해서 발생하는 경우의 수는N × M 가지입니다.예시: 음식과 음료 선택음식 선택: 삼겹살, 소고기, 치킨 (총 3가지)음료 선택: 콜라, 오렌지주스 (총 2가지)전체 경우의 수 = 3 × 2 = 6가지삼겹살 + 콜라삼겹살 + 오렌지주스소고기 + 콜라소고기 + 오렌지주스치킨 + 콜라치킨 + 오렌지주스 2. 곱의 법칙 확장 (Extension of Multiplication Rule)위 예시에서는 두 가지 사..
[백준] 토마토 (7576번) 문제 흐름문제 목표상자에 있는 토마토들이 모두 익는 데 걸리는 최소 일수를 구합니다.토마토는 익은 상태에서 인접한 상하좌우의 토마토들을 하루마다 익게 만듭니다.모든 토마토가 익을 수 없는 경우 -1을 출력합니다.입력 설명첫 줄에 MMM (상자의 세로 크기)와 NNN (가로 크기) 입력.그다음 각 칸의 상태(익은 토마토: 1, 익지 않은 토마토: 0, 빈 칸: -1)로 상자를 초기화합니다.출력 설명모든 토마토가 익는 데 걸린 최소 일수를 출력.익지 못하는 토마토가 있다면 -1을 출력합니다. 핵심 아이디어BFS(너비 우선 탐색) 사용: 여러 위치에서 동시에 확산되는 문제이므로 BFS가 적합합니다.큐(Queue)를 활용하여 여러 익은 토마토를 동시에 처리하며, 매일 새로운 익은 토마토를 큐에 추가합니다.익지 ..
[백준] 부분합 (1806번) 문제 흐름문제 목표주어진 정수 배열에서 연속된 부분 수열의 합이 주어진 수 S 이상이 되도록 하는 가장 짧은 부분 수열의 길이를 찾는 것입니다.입력 설명첫 번째 줄에 두 개의 정수 N (배열의 크기)과 SSS (목표 합) 이 주어집니다.두 번째 줄에는 N개의 정수가 배열의 요소로 주어집니다.출력 설명조건을 만족하는 가장 짧은 부분 수열의 길이를 출력하며, 그런 부분 수열이 없는 경우에는 0을 출력합니다. 핵심 아이디어슬라이딩 윈도우 기법을 사용하여 두 포인터(시작점과 끝점)를 이동시킵니다.현재 부분 수열의 합이 목표 합 S 이상이 될 때까지 끝점을 이동시키고, 목표를 만족하면 시작점을 이동하여 가능한 한 부분 수열의 길이를 최소화합니다. 알고리즘 흐름입력값 읽기: 배열의 크기 N과 목표 합 S를 입력받고..

728x90