전체 글 91

BOG) 22862.가장 긴 짝수 연속한 부분 수열 (large) (JAVA)

# 문제 링크https://www.acmicpc.net/problem/22862 # 문제 설명길이가 N인 수열 S가 있다. 수열 S는 1 이상인 정수로 이루어져 있다.수열 $S$에서 원하는 위치에 있는 수를 골라 최대 K번 삭제를 할 수 있다.예를 들어, 수열 S가 다음과 같이 구성되어 있다고 가정하자.수열 S : 1 2 3 4 5 6 7 8수열 S에서 4번째에 있는 4를 지운다고 하면 아래와 같다.수열 S : 1 2 3 5 6 7 8 수열 S에서 최대 K번 원소를 삭제한 수열에서 짝수로 이루어져 있는 연속한 부분 수열 중 가장 긴 길이를 구해보자. # 문제 풀이 BufferedReader br = new BufferedReader(new InputStreamReader(System.in))..

알고리즘 2025.08.29

BOG) 20922.겹치는 건 싫어 (JAVA)

# 문제 링크https://www.acmicpc.net/problem/20922 # 문제 설명홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 K개 이하로 들어 있는 최장 연속 부분 수열의 길이를 구하려고 한다. 100,000 이하의 양의 정수로 이루어진 길이가 N인 수열이 주어진다. 이 수열에서 같은 정수를 K개 이하로 포함한 최장 연속 부분 수열의 길이를 구하는 프로그램을 작성해보자. # 문제 풀이- N의 범위가 최대 100,000이기 때문에 이중 for문은 시간 복잡도 때문에 터진다- 따라서 O(N)으로 풀기 위해서 투 포인터를 사용 BufferedReader br = new BufferedR..

알고리즘 2025.08.29

16. Redis

Redis(Remote Dictionary Server): '키 - 값' 구조의 비정형 데이터를 관리하기 위한 오픈소스 기반의 빈관계형(NoSQL) 인메모리 DBMS- DB, Cache, Massage Broker 등의 용도로 사용 cf) Message Broker: 송신자로부터 전달 받은 메시지를 수신자로 전달해주는 중간 역할- 응용 소프트웨어 간에 메시지를 교환할 수 있게 함- 이때 Redis를 Message Queue로 활용 1. 특징Key, Value 구조이기 때문에 쿼리를 사용할 필요 없음데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠름String, Lists, Sets, Sorted, Hashes 자료 구조를 지원Single Thread : 한 번에 하나의 ..

DB 2025.07.30

15. Trigger

트리거(Trigger): 어느 특정한 동작에 반응해 자동으로 필요한 동작을 하는 것을 의미- 어떤 트랜잭션이 일어나면, 거기에 반응해서 다른 명령을 실행하게 하는 기능- 유형 )행 트리거 : 테이블 안의 영향을 받은 행 각각에 대해 실행됨변경 전 또는 변경 후의 행은 OLD, NEW라는 가상 줄 변수를 사용하여 읽을 수 있음문장 트리거 : INSERT, UPDATE, DELETE문에 대해 한 번만 실행됨- 속성 )BEFORE or AFTER : 트리거가 실행되는 시기를 지정INSTEAD OF : 트리거가 실행되는 시기를 지정WHEN : 트리거를 시작하는 조건식을 수행- 트리거의 경우 )INSERTUPDATEDELETE- 용어 )DELIMITER : 트리거의 시작과 끝을 표시CREATE TRIGGER [트..

DB 2025.07.25

14. DB의 Connection Pool

DB Connection: DB를 사용하기 위해 DB와 애플리케이션 간 통신을 할 수 있는 수단- DB Driver와 DB 연결 정보를 담은 URL을 필요로 함- Java의 DB Connection은 JDBC를 주로 사용하며, URL타입을 사용함 1. 구조2Tier : 클라이언트의 자바 프로그램(JSP)가 직접 DB 서버로 접근하여 데이터를 엑세스하는 구조3Tier : 자바 프로그램과 DB 서버 중간에 미들웨어 층을 두어, 그 미들웨어 층에게 비지니스 로직 구현으로부터 트랜잭션 처리, 리소스 관리 등을 전부 맡기는 구조JDBC(Java Database Connectivity): 자바 언어로 다양한 관계형 데이터베이스(RDBMS)에 접속하여 SQL문을 수행하여 처리하고자 할 때, 사용되는 표준 SQL 인..

DB 2025.07.25

13. DB Locking

트랜잭션 스케줄: 트랜잭션에 포함되어 있는 연산들을 수행하는 순서 cf) 병행 수행: 트랜잭션들이 차례로 번갈아 가면서 수행되는 인터리빙 방식으로 진행됨 - 유형 )직렬 스케줄 : 인터리빙 방식을 이용하지 않고 트랜잭션별로 순차적으로 실행하는 것비직렬 스케줄 : 인터리빙 방식을 이용하여 트랜잭션을 병행하여 수행시키는 것직렬 가능 스케줄 : 직렬 스케줄과 같은 결과를 생성하는 비직렬 스케줄직렬 스케줄(Serial Schedule): 인터리빙 방식을 이용하지 않고 트랜잭션별로 연산들을 순차적으로 실행시키는 것- 트랜잭션이 직렬 스케줄에 따라 수행되면, 모든 트랜잭션이 완료될 때까지 다른 트랜잭션의 방해를 받지 않고 독립적으로 수행됨- 항상 모순이 없는 정확한 결과를 얻음- 인터리빙 방식을 사용하지 않고 각 ..

DB 2025.07.25

12. B - Tree & B + Tree

B-Tree: 데이터가 정렬돈 상태로 유지되어 있는 트리로 일반적인 이진 트리와 비슷하지만 한 노드 당 자식 노드가 2개 이상 가능한 트리- 어떤 값에 대해서도 같은 시간에 결과를 얻을 수 있는 것이 장점 cf) Tree: 그래프의 일종으로, 한 노드에서 시작해서 다른 정점들을 순회하여 자기 자신에게 돌아오는 순환이 없는 연결 그래프 노드(node)사각형으로 표시된 한 개의 데이터루트 노드(root node)가상 상단의 노드브랜치 노드(branch node)중간 노드리프 노드(leaf node)가장 아래 노드- 특징 )균일성 : 어떤 값에 대해서도 같은 시간에 결과를 얻을 수 있음트리 높이가 다를 경우, 약간의 차이는 있지만 O(logN))균형 트리 : 루트로 부터 리프까지의 거리가 일정한 트리구조성능이..

DB 2025.07.25

11. RDB & NoSQL에서의 클러스터링 / 래플리케이션 방식

- DB는 기본적으로 하나의 서버, 하나의 스토리지를 가지고 있음 클러스터링(Clustering): 여러 개의 DB를 수평적인 구조로 구축하는 방식- 분산 환경을 구성하여 Single point of failure와 같은 문제를 해결할 수 있는 Fail Over 시스템을 구축하기 위해서 사용- 동기 방식으로 노드들 간의 데이터를 동기화 cf)- Single point of failure(단일 장애점): 시스템 구성 요소 중에서, 동작하지 않으면 전체 시스템이 중단되는 요소- 이중화가 되어있지 않은 요소라면 SPOF일 가능성 높음 - Fail Over: 실 운용환경(컴퓨터 서버, 시스템, 네트워크) 등에서 이상이 생겼을 때, 대체 작동 또는 장애 극복을 위해 예비 운용 환경으로 자동 전환되는 기능 1. A..

DB 2025.07.25

10. Schema

스키마: DB의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합 cf) 메타 데이터: 데이터에 대한 데이터로 어떤 목적을 가지고 만들어진 데이터 - DB를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의함 cf) ERD vs 스키마- ERD(Entity-Relationship Diagram): 개체-관계 모델로 테이블 간의 관계를 설명해주는 다이어그램- 테이블의 속성들을 상세히 표시함- 차이점 )ERD는 설계도 -> DB를 생성하기 전에 작성하는 것스키마는 구현 -> DB를 생성하면 DBMS에서 생성하는 것- 특징 )데이터 사전(Data Dictionary)에 저장..

DB 2025.07.14

9. 저장 프로시저

저장 프로시저(Stored Procedure): 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리문들의 집합- 특정 로직의 쿼리를 함수로 만들어놓은 것 cf) 저장 프로시저 vs 함수저장 프로시저 일련의 작업을 처리한 절차리턴값이 없거나 많을 수도 있음서버에서 실행되기 때문에 속도가 빠름함수여러 작업을 위한 기능리턴값이 필수클라이언트에서 실행되기 때문에 프로시저보다 느림 일반 쿼리문1. 일반 쿼리문 작동 방식1) 구문 분석: 구문 자체에 오류가 없는지 분석, 오타가 있으면 이 단계에서 에러 메시지 출력 2) 개체 이름 확인: 해당 테이블이 현재 DB에 있는지 확인, 있으면 열을 확인 3) 사용 권한 확인: 해당 테이블에 현재 접근 중인 사용자가 있는지 확인 4) 최적화: 해당 쿼리문이 가장 좋은 성..

DB 2025.07.14