본문 바로가기

분류 전체보기117

[Greedy] 그리디 알고리즘 - 크루스칼 알고리즘 ≣ 목차 크루스칼 알고리즘그래프에서 가장 적은 비용으로 모든 노드를 연결하면서 전체 간선 가중치의 합이 최소가 되는 알고리즘입니다. 다시 말해 최소 신장 트리(MST)를 만들기 위한 대표적인 알고리즘이라고 할 수 있습니다. 예를 들어, 여러 개의 도시가 있을 때 각 도시를 도로를 이용해 연결하고자 할 때 비용을 최소한으로 하고자 할 때 실제로 적용되는 알고리즘입니다. 추가적으로 전체 노드를 연결할 때 간선의 갯수는 전체 노드 갯수 -1이 간선의 갯수가 됩니다. 용어 정리노드 = 정점 = 목표: 그래프에서 동그라미 부분간선 = 거리 = 비용: 그래프에서 선에 해당하는 부분가중치: 각 간선이 가지는 값으로, 일반적으로 두 노드 간의 거리, 비용, 또는 시간을 의미합니다. 위에 내용을 토대로 아래 그래프를 살.. 2025. 4. 24.
[Greedy] 그리디 알고리즘 정리 그리디 알고리즘이란?그리디 알고리즘은 문제를 해결하는 데 있어 현재 시점에서 가장 최적의 선택을 하는 방식으로, 미래의 상황이나 결과를 고려하지 않는다고 해서 탐욕적인 접근법이라고 합니다. 알고리즘의 대표적인 문제 중 하나는 동전 거스름돈 문제입니다. 이 문제는 주어진 금액을 최소한의 동전으로 거슬러 주는 문제로, 동전의 단위가 정해져 있을 때 가장 큰 단위의 동전부터 선택하는 방식으로 해결할 수 있습니다. 예를 들어, 500원, 100원, 50원, 10원 동전이 있을 때, 760원을 거슬러 줄 경우 500원 1개, 100원 2개, 50원 1개, 10원 1개를 선택하여 총 4개의 동전으로 거슬러 줄 수 있습니다. 그리디 알고리즘은 현재 시점에서 최적의 선택을 하는 방식이지만, 이러한 선택이 항상 전체.. 2025. 4. 23.
[알고리즘] 유클리드 호제법(Euclidean Algorithm) : 최대공약수, 최소공배수 유클리드 호제법이란?유클리드 알고리즘 (Euclidean algorithm)은 2개의 자연수의 최대공약수(GCD) 를 구하는 알고리즘입니다. 해당 알고리즘에 대해서 조금 자세하게 이야기 해보겠습니다. 다음과 같은 조건을 가정합니다.1. A != B2. A > B 만약 ( A )와 ( B )가 같다면, 최대공약수는 ( A ) 또는 ( B ) 중 어느 것을 사용해도 동일합니다. 조건에서 ( A > B )라고 명시했지만, 이는 두 수의 순서가 중요하지 않다는 것을 의미합니다. 예를 들어, (12, 3)과 (3, 12)와 같이 두 수의 순서가 바뀌어도 최대공약수는 변하지 않습니다. 즉, 유클리드 호제법은 일반성을 잃지 않고 항상 유효하게 작동합니다.유클리드 호제법의 기본 원리는 다음과 같습니다: 두 수 ( A .. 2025. 3. 22.
Stack, Queue에 peek()메소드 차이점 스택(Stack, LIFO)스택은 가장 나중에 추가된 요소가 제거 되는 자료구조그러므로 peek()메소드는 스택 구조에서 가장 위에 있는 요소를 반환합니다. 예를 들어, 스택에 1, 2, 3 요소가 있을 때 peek()메소드를 사용하면 반환 값은 3이 됩니다.  큐(Queue, FIFO)큐는 먼저 추가된 요서가 제거되는 자료구조큐 자료구조에서 peek()메소드를 사용하면 가장 먼저 추가된 요소를 반환합니다. 예를 들어, 큐에 1,2,3 요소가 있을 때 peek()메소드는 1를 반환합니다. 결론자료 구조를 생각하면 답이 있다. 2025. 3. 22.
[부하테스트] 부하 테스트 서버 설정 시 주의점 1. 부하 테스트 환경 독립성 유지부하 테스트 툴은 테스트하고자 하는 시스템(백엔드, 데이터베이스 등)과 반드시 독립적으로 구성해야 합니다. 부하 테스트 툴 자체도 트래픽을 생성하며, 이 과정에서 CPU, 메모리 등 컴퓨팅 리소스를 소모하기 때문에, 테스트 환경과의 분리가 필요합니다. 또한, 독립적인 환경에서 테스트를 수행함으로써 실제 운영 환경에서의 성능을 보다 정확하게 평가할 수 있으며, 테스트 중 발생할 수 있는 리소스 경합 문제를 최소화할 수 있습니다. 이를 통해 부하 테스트의 신뢰성을 높이고, 시스템의 성능 병목 현상을 효과적으로 식별할 수 있습니다. 더불어, 테스트 환경이 독립적일 경우, 다양한 부하 시나리오를 설정하고 실험할 수 있는 유연성을 제공하여, 시스템의 안정성과 확장성을 평가하는 데.. 2025. 3. 20.
[부하 테스트] 기초 용어 정리 + 추가 Tip 정리 부하 테스트란?전체 시스템이 어느 정도 트래픽을 견딜 수 있는지 테스트 그럼 부하 테스트는 왜 할까??서비스를 배포하기 전에 부하 테스트를 진행하면 서버가 견딜 수 있는 트래픽의 한계를 사전에 파악할 수 있어, 이를 통해 모니터링을 통해 트래픽이 어느 정도 증가할 때 서버에 얼마나 부담이 갈 수 있는지를 인지하고, 서버 과부하가 걸려 서버가 터지는 걸 미리 인지하고 빠르게 대처할 수 있습니다. 부하(Load)란?부하는 서비스에 가해지는 트래픽 양이나 요청의 수를 의미하며, 이는 서비스에서 처리해야 하는 작업의 양을 나타냅니다. 부하와 처리량이라는 용어를 보면 그 의미를 쉽게 떠올릴 수 있지만, 개념만으로는 혼란스러울 수 있습니다. 따라서 명확히 하자면, 부하는 단순히 서비스에 요청되는 양을 의미하고, 처.. 2025. 3. 20.
[Java] 자바 자료구조 간단 정리 - 코테용 ≣ 목차 자료구조자료구조는 데이터를 효율적으로 저장하고 관리하기 위한 방법이나 형식을 의미합니다. 자료구조는 데이터의 조직, 관리, 저장 방식을 정의하며, 이를 통해 데이터에 대한 접근, 수정, 삭제 등의 작업을 효율적으로 수행할 수 있습니다. 자바에서 자료구조는 Array, List, Hash, Map, Stack 등 여러가지만 있지만 코딩테스트에서 자주 사용되는 자료구조만 정리하겠습니다.  배열자바에서 배열은 객체로 취급되며, 배열의 이름은 배열 객체의 메모리 주소를 참조하여 배열이 저장된 메모리 위치를 가리키는 포인터와 같은 역할을 합니다. 배열은 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조로, 배열의 값은 인덱스를 통해 직접 접근할 수 있으며, 선언한 자료형의 값만 저장할 수 있습니다... 2025. 2. 14.
시간 복잡도, 공간 복잡도, 빅오 표기법 간단 정리 시간복잡도시간복잡도는 알고리즘이 주어진 입력 크기에 따라 문제를 해결하는 데 걸리는 시간의 상관관계를 나타내는 지표로, 입력 크기가 커질수록 알고리즘의 실행 시간이 어떻게 변하는지를 보여줍니다. 즉, 시간복잡도가 낮은 알고리즘일수록 더 효율적으로 문제를 해결할 수 있으며, 이는 알고리즘의 성능을 평가하는 중요한 기준이 됩니다.  시간복잡도 분석의 고려사항1. 모든 상황을 고려알고리즘의 성능을 평가할 때, 최선의 경우, 평균적인 경우, 최악의 경우를 모두 고려해야 합니다대체로 최악의 경우로 가정하고 분석합니다2. 입력값의 크기입력값의 크기에 따라 알고리즘의 실행 시간에 미치는 영향을 고려해야 합니다.일반적으로 입력값이 커질수록 실행 시간이 증가이 외에 공간복잡도, 컴퓨터 성능 같이 여러 고려사항이 있지만 .. 2025. 2. 11.
[QueryDSL] CountQuery 최적화 - PageableExecutionUtils PageableExecutionUtils는 Spring Data에서 제공하는 효율적인 페이징 처리를 도와주는 클래스입니다. 특히 getPage() 메소드는 데이터를 가져올 때 상황에 따라 최적화하여 성능에 큰 도움이 됩니다. 일단 핵심이 되는 getPage()메소드에 들어가는 인자를 분석해 보겠습니다.public static Page getPage(List content, Pageable pageable, LongSupplier totalSupplier) { ....}content: 한 페이지에 있는 데이터pageable: 페이징 관련 정보를 담고 있는 Pageable 객체입니다. 이 객체는 현재 페이지 번호, 페이지 크기 등 여러 정보를 가지고 있습니다.totalSupplier: 데이터의 총개수를 반.. 2025. 2. 7.
[QueryDSL] fetchResults(), fetchCount() 대안 - QeuryDSL 5.0.0 버전 이후 fetchResults()와 fetchCount()는 페이징처리나 카운트 쿼리를 작성할 때 자주 사용되는 메서드입니다. 이 두 메서드는 페이징  유용하지만 QeuryDSL 5.0.0 이후에는 지원 중단(deprecated)되었다고 공식 사이트에 올라왔습니다. 이 메소드들은 왜 중단이 되었고 어떻게 대처할지 알아보겠습니다.   fetchResults()와 fetchCount()의 역할 fetchResults(): 페이징 처리된 결과 리스트 + 전체 결과 수를 반환하는 메서드fetchCount(): 쿼리의 결과 행(row) 수를 반환하는 메서드 fetchResults()와 fetchCount()의 지원 중단 이유fetchResults()와 fetchCount()가 지원 중단된 이유는 여러 가지가 있습니다. .. 2025. 2. 5.