유니온 파인드(Union-Find) 알고리즘이란 유니온 파인드 알고리즘은 대표적인 그래프 알고리즘 중 하나로, 주어진 그래프의 노드들을 서로 다른 집합으로 분리하거나, 두 개의 노드가 같은 집합에 속하는지 여부를 판단하는 데 사용됩니다. 이 알고리즘은 일반적으로 노드들이 상호 연결된 그래프에서 사용됩니다. 초기에는 모든 노드들이 각각 서로 다른 집합에 속해 있습니다. 유니온 파인드 알고리즘은 두 개의 노드가 같은 집합에 속하도록 하거나, 두개의 집합을 하나로 합치는 연산을 수행합니다. 이 알고리즘의 핵심은 각각의 집합을 하나의 트리로 나타내는 것 입니다. 각 노드는 해당 집합의 루트 노드를 가리키는 포인터를 가지고 있습니다. 노드들이 합쳐지면, 두 트리의 루트 노드를 연결하고, 이전에 각 트리의 루트 노..
컴퓨터 보안이란 컴퓨터 보안(Computer Security)은 컴퓨터 시스템과 네트워크 시스템의 보호를 위한 전문 분야입니다. 컴퓨터 보안은 컴퓨터 시스템의 보안 위협으로부터 데이터를 보호하고, 시스템의 안정성과 기밀성을 유지하기 위해 일련의 절차와 기술을 적용합니다. 컴퓨터 보안은 컴퓨터 시스템과 네트워크 시스템에 대한 공격을 방어하고, 보안 위협으로부터 시스템을 보호하는데 중점을 둡니다. 이러한 보안 위협은 컴퓨터 바이러스, 악성 소프트웨어, 침입자, 악의적인 해커 등으로부터 발생할 수 있습니다. 컴퓨터 보안은 컴퓨터 시스템의 안정성, 가용성, 무결성, 기밀성을 유지하는 것을 목표로 합니다. 이를 위해 다양한 보안 기술과 방법을 사용합니다. 이러한 기술과 방법으로는 암호화, 인증, 권한 부여, 네트..
Garbage Collection(가비지 컬렉션)이란 자바 가상 머신(JVM)에서 자동으로 객체를 제거하여 메모리를 해제하는 프로세스입니다. 자바에서 객체는 동적으로 할당되며, 개발자가 명식적으로 메모리를 해제하지 않으면 더 이상 사용하지 않는 객체가 메모리에 계속 남아있을 수 있습니다. 이러한 객체를 가바지라고 부릅니다. 가비지 컬렉션은 이러한 가비지 객체들을 자동으로 식별하고, 메모리를 자동으로 해제하여 프로그램 실행 중에 메모리 누수를 방지합니다. 자바에서 가비지 컬렉션은 일반적으로 개발자가 관여할 필요가 없으며, JVM이 자동으로 수행합니다. 그러나 가끔씩 가바지 컬렉션의 성능을 최적화하거나 세부적인 제어가 필요할 수도 있습니다. 장점 메모리 누수 방지 : 가비지 컬렉션은 더 이상 사용하지 않는 ..
요구 페이징이란? 요구 페이징(demand paging)은 운영체제에서 사용되는 가상 메모리 관리 기법중 하나이다. 요구페이징은 프로세스가 실행되는 동안 필요한 페이지만 메모리에 올리고, 필요하지 않은 페이지는 디스크에 저장하여 메모리를 절약하는 방법입니다. 이를 위해 페이지 테이블에 페이지의 위치 정보와 함께 각 페이지의 접근 여부를 표시하여 필요한 페이지만 메모리에 올리게 된다. 요구 페이징의 장점 효율적인 메모리 사용 : 요구페이징은 물리적 메모리 공간을 아끼면서 프로세스가 필요한 페이지만 메모리에 적재하므로 메모리 사용이 효율적입니다. 빠른 프로세스 실행 : 요구 페이징은 필요한 페이지만 적재하므로 디스크에서 메모리로 페이지를 로드하는 작업이 빠릅니다. 이는 프로세스 실행속도를 높이는데에 도움이 ..
정규화(Normalization) 정규화란 데이터베이스 설계 시 중복을 최소화하며 데이터를 구조화하는 과정이다. 이는 데이터의 무결성을 보장하고 데이터베이스의 성능을 향상시킨다. 정규화는 1970년대 E.F.Codd가提唱한 관계형 데이터베이스 이론의 핵심 개념이다. 이론에 따르면, 데이터베이스의 테이블은 1차 정규화, 2차 정규화, 3차 정규화, BCNF, 4차 정규화, 5차 정규화 등으로 분류된다. 장점 데이터 중복 최소화 데이터 무결성 유지 쿼리의 성능 향상 단점 데이터베이스 설계에 많은 시간과 노력이 필요 복잡한 데이터베이스 설계로 인한 성능 저하 가능성 너무 많은 정규화를 시키면 데이터의 일관성을 유지하거나 읽어오는 데 시간이 더 오래 걸릴 수 있음. 비정규화(Denormalization) 비정규..
CPU 스케줄링이란 CPU 스케줄링은 운영체제가 CPU를 효율적으로 활용하기 위한 방법입니다. 이는 여러 프로세스들 중에서 어떤 프로세스를 먼저 실행할지, 얼마나 오랫동안 실행할지 등을 결정하는 일련의 과정을 말합니다. CPU 스케줄링은 시스템 성능을 높이고, 시스템 자원을 효율적으로 사용하여, 다양한 작업을 보다 빠르게 처리할 수 있도록 도와줍니다. CPU 스케줄링은 규모에 따라 장기, 중기, 단기 스케줄링으로 구분된다. CPU 스케줄링은 프로세스들의 우선순위와 요구사항에 따라 CPU 자원을 할당하는 방법입니다. 이러한 CPU 스케줄링 방법은 프로세스의 규모와 적용 시기에 따라 장기, 중기, 단기 스케줄링으로 구분됩니다. 장기 스케줄링: 시스템에 새로운 프로세스가 들어올 때, 어떤 프로세스를 메모리에 ..
플로이드 와샬이란 모든 최단 경로를 구하는 알고리즘이다. 다익스트라는 하나의 정점에서 다른 모든 정점까지의 최단 거리를 구하는 알고리즘이라고 한다면, 플로이드-와샬은 한번 실행하여 모든 노드간 최단 경로를 구할 수 있는 것이다. 다익스트라 알고리즘이 가장 적은 비용을 하나씩 선택했다면 플로이드 와샬 알고리즘은 기본적으로 거쳐가는 정점을 기준으로 알고리즘을 수행한다는 점에서 그 특징이 있다. 플로이드 와샬 알고리즘의 과정 예시로 모든 노드간의 최단거리를 구해야하므로 2차원 인접 행렬을 구성한다. 알고리즘은 여러 라운드로 구성됩니다. 라운드마다 각 경로에서 새로운 중간 노드로 사용할 수 있는 노드를 선택하고, 더 짧은 길이를 선택하여 줄이는 과정을 반복한다. 초기 그래프를 인접행렬로 나타내면 다음과 같습니다..
그리디 알고리즘이란 탐욕법 알고리즘이란 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미한다. 그리디 알고리즘을 이용하면 매 순간 가장 좋아 보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 그리디 알고리즘은 기준에 따라 좋은 것을 선택하는 알고리즘이므로 문제에서 '가장 큰 순서대로', '가장 작은 순서대로' 와 같은 기준을 알게 모르게 제시해준다. 코딩 테스트에서 출제되는 그리디 알고리즘 유형의 문제는 창의력, 즉 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구한다. 그렇기에 많은 연습이 필요하다. 코딩테스트에서는 바로 문제의 유형을 파악하기 어렵다. 우선 그리디알고리즘을 의심하고, 문제를 해결할 수 있는 해결법이 존재하는지 고민한 이후에 해결방..