배열(Array)과 집합(Set) 자료구조의 핵심 원리
배열(Array)과 집합(Set) 자료구조의 핵심 원리
자료구조는 데이터를 효율적으로 저장하고 관리하기 위한 구조입니다. 그중에서도 배열(Array)과 집합(Set)은 매우 기본적인 자료구조로 널리 사용됩니다. 이 두 자료구조의 가장 큰 차이점은 요소의 중복 허용 여부에 있습니다. 배열은 중복된 요소를 허용하는 반면, 집합은 고유한 요소만을 저장합니다.
배열(Array) 자료 ...
8월 17일 08:53에 게시됨
팀 큐 시뮬레이션 구현하기
팀 큐는 각 원소가 특정 팀에 속하는 자료구조입니다. 새로운 원소가 큐에 들어올 때, 큐의 앞에서부터 검사하여 같은 팀의 원소가 이미 존재하는지 확인합니다. 같은 팀원이 있다면 그 뒤에 바로 삽입되고, 없다면 큐의 가장 뒤에 추가됩니다. 디큐(dequeue) 작업은 일반 큐와 동일하게 앞에서부터 순서대로 처리됩니다. 이 문제는 이러한 팀 큐를 효율적으로 시뮬레이션 ...
7월 28일 00:38에 게시됨
Java 연결 리스트 기본 개념 및 구현
연결 리스트는 가변 길이의 객체 배열과 유사한 동적 데이터 구조입니다. 이는 데이터 저장 용량 제한이 없고 빠른 탐색 속도를 제공하여 데이터 구조의 여러 문제를 해결합니다. 기존 배열은 고정된 크기로 인해 데이터 삽입, 삭제, 수정 시 번거롭다는 단점이 있습니다. 이러한 단점을 극복하기 위해 연결 리스트는 동적 배열 역할을 수행할 수 있습니다.
연결 리스트의 ...
7월 25일 20:58에 게시됨
스택과 큐를 활용한 자료 구조 문제 해결 전략
스택과 큐는 컴퓨터 과학에서 가장 기본적이고 널리 사용되는 선형 자료 구조입니다. 이 두 가지 구조는 데이터를 저장하고 접근하는 방식에 있어 명확한 차이를 가지며, 다양한 알고리즘 문제 해결에 필수적인 도구로 활용됩니다. 스택은 '후입선출(LIFO: Last In, First Out)' 원칙을 따르며, 큐는 '선입선출(FIFO: First In, First Out)' 원칙을 따릅니다. 특히 스택은 ...
7월 25일 13:02에 게시됨
이진 인덱스 트리와 세그먼트 트리를 활용한 효율적인 알고리즘 해결 방안
이 문제는 주로 자료구조를 다루며, O(n log²n) 시간 복잡도를 가지는 이진 인덱스 트리와 이분 탐색 조합이 O(n log n)의 세그먼트 트리 이분 탐색보다 빠르다는 점을 보여줍니다. 세그먼트 트리는 상수 최적화가 필요할 정도로 20ms 차이로 시간 초과가 발생합니다.
공식을 통해 k 라운드(모두 사용) 후 체력이 0이 되는 지점을 이분 탐색으로 찾을 수 있습니다. 그 다음 ...
7월 25일 13:03에 게시됨
C# 동시성 큐 내부 동작 원리 분석
저장 구조 설계
C#의 동시성 큐는 배열과 연결 리스트의 조합으로 구현됩니다. 세그먼트(segment)라는 단위로 데이터를 관리하며, 각 세그먼트는 고정 크기 배열(기본 32개 요소)을 포함합니다. 세그먼트는 단방향 연결 구조로 구성되며, 큐는 헤드(첫 번째 세그먼트)와 테일(마지막 세그먼트) 포인터를 유지합니다.
internal class QueueSegment<T>
{
internal ...
7월 23일 17:21에 게시됨
Java 과제 1~3 요약 및 분석
서론
세 주간의 Java 개발 과정을 통해, 과제는 단순한 문제 설계에서 복잡한 논리로 점진적으로 깊어졌습니다. 이 세 번의 과제는 Java 언어 기본에 대한 이해뿐만 아니라 객체 지향 설계, 예외 처리, 복잡한 자료 구조 사용까지 다루고 있습니다. 세 번의 과제를 마친 후, 이에 대한 요약을 제공합니다. 먼저 과제의 양은 점차 줄어들었지만, 난이도는 분명히 증가했습니 ...
7월 22일 23:42에 게시됨
Codeforces Round 982 (Div. 2) 문제 해결 및 코드 분석
A 문제: 최적 직사각형 둘레
문제의 핵심은 최종 도형의 둘레가 최대 너비와 높이를 가진 직사각형의 둘레와 같다는 결론을 도출하는 것입니다.
#include
using namespace std;
typedef long long ll;
void solve() {
int test_case;
cin >> test_case;
while (test_case--) {
int shape_count;
cin >> shape_count;
...
7월 20일 09:07에 게시됨
힙(Heap) 자료구조
목차
기초 지식
이진 트리
포화 이진 트리
완전 이진 트리
정의
인터페이스 (최소 힘 예시)
노드 삽입 - push
노드 삭제 - pop
힙 구축 - make_heap
힙 정렬 - heap_sort
요약
1. 기초 지식
이진 트리:
n개의 노드로 구성된 트리 형태의 자료 구조로, 각 노드는 최대 두 개의 자식 노드를 가질 수 있습니다.
포화 이진 트리:
각 레벨의 노드 수가 최대로 채워져 ...
7월 19일 20:28에 게시됨
알고리즘 문제 해결: 문자열 뒤집기 및 문자 교체
문자열 뒤집기
해결 접근법:
양쪽 끝에서 시작하는 이중 포인터를 사용하여 문자 순서를 교환하다가 좌우 포인터가 만날 때까지 반복합니다;
이 문제에는 또한 XOR 연산자를 활용한 요소 교환 방식도 있습니다.
public void reverseString(char[] s) {
// 이중 포인터 방식으로 문자 순서 교환
int left = 0;
int right = s.length - 1;
while(left < ...
7월 16일 19:45에 게시됨