전체 글 217

프로그래머스: 뒤에 있는 큰 수 찾기(JAVA)

문제 설명정수로 이루어진 배열 numbers가 주어집니다.각 원소에 대해 자신보다 뒤에 있는 숫자 중에서 처음으로 자신보다 큰 수를 찾아야 합니다.그런 수가 없다면 -1을 대신 넣습니다.입력 예시int[] numbers = {2, 3, 3, 5};출력 예시[3, 5, 5, -1] 풀이이 문제는 단순히 이중 for문으로 O(N^2) 시간 복잡도로도 풀 수 있지만,최적화가 필요한 경우 스택을 이용한 역순 순회 방식이 효율적입니다.✅ 핵심 전략:배열을 오른쪽 → 왼쪽으로 순회자신보다 큰 수가 나올 때까지 스택 pop조건을 만족하는 수를 만나면 answer에 저장하고 현재 수를 다시 pushJava 코드 (스택)import java.util.*;class Solution { public int[] solu..

Algorithm 2025.06.19

MySQL 인덱스: Clustered vs Secondary vs Covering

Clustered Index (클러스터드 인덱스)클러스터드 인덱스란, 테이블의 데이터 자체가 인덱스에 포함되어 있는 구조입니다.즉, 리프 노드가 실제 레코드를 저장합니다.InnoDB 스토리지 엔진에서는 항상 Primary Key가 클러스터드 인덱스가 됩니다.만약 PK가 없으면, NOT NULL UNIQUE 제약 조건이 있는 첫 번째 컬럼이 선택되며, 없으면 내부적으로 6바이트 Row ID가 자동 생성되어 클러스터드 인덱스로 사용됩니다.구조B+ Tree 구조├── Internal Node│ ├── Key│ └── Pointer└── Leaf Node └── 실제 데이터 (Row)예제CREATE TABLE products ( id INT PRIMARY KEY, name VARCHA..

MySQL 2025.06.19

ORACLE(오라클) LISTAGG 함수 정리

Oracle에서 문자열을 집계(aggregation)할 때 유용하게 사용하는 함수 중 하나가 바로 LISTAGG입니다. 주로 GROUP BY 결과를 문자열로 연결하고 싶을 때 사용하며, 실무에서 보고서, 로그 분석, 그룹별 항목 나열 등에 자주 활용됩니다.1. LISTAGG 함수란?LISTAGG는 집계 함수로, 그룹 내 다수의 행 값을 구분자를 사용하여 하나의 문자열로 결합해 줍니다.Oracle 11g R2 (11.2)부터 지원되며, 버전별로 동작 방식에 차이가 있습니다.2. 기본 문법LISTAGG(컬럼명, '구분자') WITHIN GROUP (ORDER BY 정렬기준컬럼)컬럼명: 연결할 문자열 컬럼'구분자': 각 값 사이에 넣을 구분자 (예: 쉼표 ,, 슬래시 / 등)WITHIN GROUP (ORDER..

Oracle 2025.06.19

백준 11054번:가장 긴 바이토닉 부분 수열(JAVA)

문제수열에서 증가하다가 감소하는 부분 수열 중 가장 긴 길이를 구하는 문제입니다.이를 위해 각 위치 i를 기준으로i까지의 최장 증가 수열 (LIS) 길이: inc[i]i부터의 최장 감소 수열 (LDS) 길이: dec[i]최종 결과는 inc[i] + dec[i] - 1 중 최댓값입니다. 바이토닉 수열이란?어떤 수열에서 증가하다가 감소하는 수열을 의미합니다.1 3 5 4 2 → 바이토닉1 2 3 4 5 → X (감소 없음)5 4 3 2 1 → X (증가 없음)바이토닉 수열의 최대 길이를 구하는 프로그램을 작성하려고 합니다. 자바 코드 ①: 조건문 방식import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.IOException..

Algorithm 2025.06.11

프로그래머스: 방문 길이(JAVA)

게임 캐릭터를 상하좌우로 움직이면서 **지나간 '서로 다른 길의 수'**를 구하는 문제입니다. 단, 한 번 지나간 길은 다시 지나가도 새로운 길로 취급하지 않습니다.문제 설명초기 위치: (0, 0)명령어:U: 위로 한 칸D: 아래로 한 칸L: 왼쪽으로 한 칸R: 오른쪽으로 한 칸좌표 제한: x, y ∈ [-5, 5]중복 경로: 같은 길은 한 번만 센다 (양방향 포함)풀이Set을 사용해서 중복되지 않는 경로만 저장한다.경로를 "x1,y1,x2,y2" 형식으로 저장하며, 양방향 모두 저장한다.예: (0,0) → (0,1) 와 (0,1) → (0,0)은 같은 경로로 간주경계 밖으로 이동하려는 명령은 무시한다.마지막에 Set 크기를 2로 나눠서 실제 경로 개수를 구한다.JAVAimport java.util.*;..

카테고리 없음 2025.06.04

AWS 탄력적 IP(Elastic IP)란?

**탄력적 IP(EIP)**는 AWS에서 제공하는 고정 공인 IP 주소입니다. 일반적으로 EC2 인스턴스를 생성하면 동적 공인 IP가 부여되는데, 이 IP는 인스턴스를 중지했다가 다시 시작하면 바뀝니다.탄력적 IP는 변하지 않는 고정 공인 IP 주소로, EC2 인스턴스가 중단되거나 재시작되더라도 같은 IP 주소를 계속 사용할 수 있게 해줍니다. 왜 필요할까?도메인 연결: IP가 바뀌면 도메인(DNS) 설정을 다시 해야 함 → 탄력적 IP로 고정 IP 유지외부 시스템 연동: API 서버 등에서 IP 허용 리스트에 등록할 경우, 고정 IP가 필수가용성 확보: 인스턴스 장애 시에도 EIP를 다른 인스턴스로 바로 연결 전환 가능 탄력적 IP 사용 흐름1. 탄력적 IP 할당AWS 콘솔에서 네트워킹 > 탄력적 IP..

AWS 2025.05.29

AWS EC2란? EC2 인스턴스 생성 방법

AWS(아마존 웹 서비스)를 처음 접하는 개발자 또는 인프라 입문자라면 가장 먼저 만나게 되는 서비스 중 하나가 **EC2(Elastic Compute Cloud)**입니다. 이번 글에서는 EC2가 무엇인지, 그리고 EC2 인스턴스를 처음 생성하는 방법을 단계별로 소개하겠습니다. EC2란 무엇인가?EC2는 Elastic Compute Cloud의 약자로, 쉽게 말하면 **AWS에서 제공하는 가상 서버(Virtual Machine)**입니다. 클라우드 상에서 컴퓨팅 자원을 빠르게 생성하고, 운영체제를 선택해 원하는 환경을 구성할 수 있습니다.EC2의 핵심 특징온디맨드(필요할 때 생성하고 삭제) 방식다양한 OS 선택 가능 (Amazon Linux, Ubuntu, Windows 등)스펙(메모리, CPU, 스토..

AWS 2025.05.29

프로그래머스: 롤케이크 자르기(JAVA)

🧩 문제 설명철수는 동생에게 롤케이크의 절반을 공평하게 나눠주려고 합니다.롤케이크에는 여러 종류의 토핑이 순서대로 놓여 있고,철수는 토핑이 놓인 순서대로 한 조각씩 왼쪽으로 자를 수 있습니다.이때 자신과 동생이 갖게 되는 토핑의 종류 수가 같아지는 경우의 수를 구해야 합니다.❗예시입력: [1, 2, 1, 3, 1, 4, 1, 2]출력: 2 풀이방법전체 토핑 개수를 Map으로 세어둔다.왼쪽부터 한 칸씩 자르면서:왼쪽 토핑 종류는 Set으로 관리하고,오른쪽 토핑 종류는 Map에서 하나씩 감소시키며 관리합니다.양쪽의 토핑 종류 수(Set.size() vs Map.size())가 같으면 answer 증가JAVA 코드import java.util.*;class Solution { public int sol..

Algorithm 2025.05.29

Synchronized와 ReentrantLock 차이점

공통점둘 다 임계 영역(critical section) 을 보호하여 동시 접근 문제를 방지합니다.하나의 스레드만 임계 영역을 실행할 수 있게 락(Lock)을 사용합니다.Synchronized (Java 키워드)JVM 수준의 모니터 락을 사용합니다.사용법이 간단함:synchronized (object) { // 임계 영역}메서드 단위로도 사용 가능:public synchronized void method() { ... }장점코드가 간결하고 가독성이 높음.락 해제를 자동으로 처리 (예외 발생 시에도 자동 해제).JVM이 최적화를 잘 해줌 (예: biased locking 등).단점공정성(fairness) 조절 불가.타임아웃 또는 인터럽트 불가.세밀한 락 제어 불가 (조건 변수 등 사용 불가).Reent..

Back_End/Java 2025.05.29

TCP 3-way Handshake와 4-way Handshake 정리

TCP는 신뢰성 있는 연결형 프로토콜로, 통신을 시작할 때는 3-way Handshake, 연결을 종료할 때는 4-way Handshake 절차를 거칩니다. 각각의 과정이 어떻게 이루어지는지, 왜 그렇게 설계되었는지에 대해 자세히 알아보고, 자주 묻는 질문에 대해서도 함께 설명드립니다. TCP 3-way Handshake: 연결 설정 과정TCP는 양 끝단의 통신 노드 간에 연결을 맺기 위해 3단계(3-way Handshake) 절차를 사용합니다. 목적은 양쪽의 송수신 준비 상태 확인 및 초기 시퀀스 번호(ISN) 교환입니다.SYN (Client → Server):클라이언트는 서버에게 연결을 요청하며, 자신의 ISN을 포함한 SYN 패킷을 보냅니다.SYN + ACK (Server → Client):서버는 ..

Network 2025.05.27