[DS] LinkedList
·
🔻Computer Science/Data Structure
❗LinkedList란?LinkedList란 각 데이터 요소가 노드 형태로 존재하고 각 노드가 다음 노드를 가리키며 연결된 형태를 가진다. 연결 구조 덕분에 데이터의 삽입과 삭제가 유연하게 가능하여 이 점에서는 배열보다 유리하다고 할 수 있다.노드(Node)연결 리스트에서 각 데이터를 담고 있는 단위각 노드는 데이터와 다음 노드를 가리키는 포인터를 가지고 있음헤드(Head)리스트의 첫 번째 노드를 가리키는 포인터연결 리스트는 첫 번째 노드부터 시작해서 다음 노드를 따라가면서 데이터를 조회포인터(Pointer)다음 노드의 위치를 가리키는 참조연결 리스트는 각 노드가 포인터를 통해 다음 노드의 위치를 알고 있음   ❗ LinkedList 종류단일 연결 리스트(Singly Linked List):각 노드가 하..
[Algorithm] 0-1 배낭 문제 이론 + 예제
·
🔻Computer Science/Algorithm
❗0-1 배낭 문제란?0-1 배낭 문제는 각 물건을 한 번만 선택하거나 아예 선택하지 않는 문제로 중복 선택이 불가하며 물건을 0번(선택하지 않음) 또는 1번(선택함) 선택할 수 있기 때문에 0-1이라는 이름이다. 최대 용량을 넘지 않으면서 가치의 합이 최대가 되도록 선택하는 방법이다. ❗예제배낭의 최대 용량: k = 5물건의 정보 무게가치물건123물건234물건345 물건1의 무게가 2이므로 용량이 2 이상일 때부터 넣을 수 있다. w=2 ~ w=5까지 물건1을 넣었기 때문에 3으로 갱신한다. 물건2의 무게는 3이기 때문에 w=3부터 w=5까지 넣을 수 있다. 이때 w=3, 4의 경우 물건1을 넣은 가치인 3보다 물건2을 넣은 가치 4가 더 크기 때문에 4로 갱신해 준다. w=5의 경우는 물건1의 무게 ..
[Algorithm] Dijkstra(다익스트라) 이론 + 예제
·
🔻Computer Science/Algorithm
❗Dijkstra(다익스트라)란?다익스트라(Dijkstra) 알고리즘은 그래프에서 한 노드에서 다른 모든 노드까지의 최단 경로를 찾는 알고리즘이며 가중치가 있는 양의 가중치 그래프에 사용된다.   ❗다익스트라 알고리즘의 원리초기 설정:시작 노드에서 모든 노드까지의 최단 거리를 저장하는 배열(distance)을 생성하고 모든 거리를 무한대로 초기화시작 노드의 거리는 0으로 설정우선순위 큐 사용:시작 노드부터 출발하여 우선순위 큐(또는 최소 힙)에 현재 거리가 가장 짧은 노드를 선택하여 탐색을 진행매번 가장 짧은 거리를 가진 노드를 선택해 그 노드의 인접한 노드들을 확인최단 거리 갱신:현재 노드에서 인접 노드로 가는 거리가 기존에 기록된 거리보다 짧으면 distance 배열을 갱신갱신된 정보를 큐에 추가하여..
[Network] DNS
·
🔻Computer Science/Network
❗DNS란?인터넷에서 도메인 이름(예: www.example.com)을 IP 주소(예: 192.0.2.1)로 변환하는 시스템이다. 사람이 기억하기 쉬운 도메인 이름을 사용해 웹사이트나 네트워크 자원에 접근할 수 있게 하며 IP 주소로 서버에 연결을 가능하게 하여 인터넷의 전화번호부 역할 한다. 인터넷이 정상적으로 작동하려면 신뢰할 수 있고 빠른 DNS 서비스가 필수적이다. ❗DNS의 역할과 동작 원리DNS는 계층 구조로 이루어져 있으며 단계별로 정보가 저장되고 검색된다. DNS 요청과 캐시 확인사용자가 웹 브라우저에 도메인 이름을 입력하면 먼저 브라우저와 운영 체제에서 해당 도메인 이름의 IP 주소가 캐시(임시 저장소)에 있는지 확인함캐시에 존재하지 않으면 DNS 서버에 요청을 보냄DNS 서버 계층 구조..
[Database] Sharding
·
🔻Computer Science/Database
❗Sharding(샤딩)이란?대규모 데이터베이스를 처리할 때 성능과 확장성을 확보하기 위해 데이터를 분할하는 기법이다. 데이터 분할 목적: 단일 데이터베이스 서버가 처리할 수 있는 용량이나 트래픽에 한계가 있을 때 이를 극복하기 위해 데이터를 여러 개의 작은 데이터베이스로 나누어 분산 처리수평적 분할(Sharding): 데이터를 수평으로 나누어 각각의 분할된 데이터베이스(샤드, shard)가 독립적으로 작동하며 적은 양의 데이터를 처리하게 함으로써 성능을 향상시키고 확장성을 높임예시: 고객 정보 100만 건을 4개의 샤드로 나누면 각 샤드는 약 25만 건의 데이터를 저장하고 처리  ❗ Sharding의 장점확장성(Scalability)데이터를 여러 서버에 분산하여 저장하고 처리할 수 있어서 서버 성능에 ..
[OS] Memory
·
🔻Computer Science/Operating System
❗메모리의 종류휘발성 메모리비휘발성 메모리전원이 꺼지면 저장된 데이터가 사라지는 메모리RAM (Random Access Memory)DRAM (Dynamic RAM): 지속적으로 데이터를 새로 고쳐야(refresh) 하는 메모리로 대부분의 시스템에서 주 메모리로 사용됨SRAM (Static RAM): DRAM보다 빠르고 새로 고침이 필요 없지만 더 비싸고 용량이 적음 전원이 꺼져도 데이터가 유지되는 메모리ROM (Read-Only Memory), SSD (Solid State Drive), HDD (Hard Disk Drive), 플래시 메모리 등ROM: 부팅 시 필요한 시스템 펌웨어나 하드웨어의 기본 정보를 저장하는 메모리NAND 플래시 메모리: 주로 스마트폰, SSD, USB 드라이브 등에 사용되며 ..
[Algorithm] 달팽이 배열(나선형 배열)
·
🔻Computer Science/Algorithm
❗달팽이 배열나선형으로 배열을 채우는 패턴으로 배열을 돌면서 값을 순서대로 채우는 배열을 말한다. 일반적으론 왼쪽 상단에서 시작해서 안쪽으로 채우는 경우가 많고, 변형으로 중앙에서 시작해서 바깥쪽으로 나가는 방식도 있다  ❗좌측 상단에서 시작n, m = map(int, input().split(" "))graph = [[0 for _ in range(m)] for _ in range(n)]visited = [[0 for _ in range(m)] for _ in range(n)]dx = [0, 1, 0, -1]dy = [1, 0, -1, 0]d = 0x = 0y = 0graph[x][y] = 1visited[x][y] = 1for i in range(2, n * m+1): nx = x + dx[d]..
[DS] Trie(트라이)
·
🔻Computer Science/Data Structure
❗Trie란?Trie(트라이)는 문자열을 저장하고 효율적으로 검색하기 위한 트리 기반 자료구조이다. 특히 문자열의 접두사(prefix) 검색에 강점이 있고 자동 완성, 사전 검색, 문자열 집합에서의 중복 확인 등에 유용히다각 노드는 하나의 문자를 저장하고 자식 노드로 이어지는 링크들을 가지며 루트에서 시작해 각 문자를 따라가면 하나의 문자열이 완성된다. 루트 노드는 아무 문자도 저장하지 않고 자식 노드들로 각 문자가 연결각 노드는 문자와 자식 노드들을 가짐단어의 끝을 표시하는 종료 노드가 필요하며 보통 플래그로 설정  ❗Trie의 복잡도삽입/탐색 시간복잡도O(L) (L은 문자열의 길이) 문자열의 길이에 비례하기 때문에 길이가 짧을수록 빠른 퍼포먼스를 낼 수 있다. 공간복잡도O(∑L) (저장된 모든 문자열..
[Network] LoadBalancing
·
🔻Computer Science/Network
❗LoadBalancing이란?여러 서버나 네트워크 장치로 들어오는 트래픽을 효율적으로 분산시켜 시스템의 성능, 안정성, 확장성을 향상시키는 기술이다. 이는 서버의 과부하를 방지하고 서비스의 가용성을 보장하는 데 중요한 역할을 한다.로드밸런싱은 다양한 방법과 기술을 사용하여 구현되며 주로 웹 서버, 애플리케이션 서버, 데이터베이스 서버 등에서 많이 사용된다. ❗로드밸런싱 알고리즘 라운드 로빈(Round Robin):가장 기본적인 알고리즘으로, 각 서버에 순서대로 트래픽을 배분하는 방식구현이 간단하고 모든 서버에 고르게 트래픽이 분배됨서버의 성능 차이를 고려하지 않기 때문에 고성능 서버가 충분히 활용되지 못할 수 있음가중치 라운드 로빈(Weighted Round Robin):서버의 성능에 따라 가중치를 부..
[Algorithm] 분할정복 이론 + 예제
·
🔻Computer Science/Algorithm
❗분할정복이란?문제를 작은 하위 문제로 나누고 각각의 하위 문제를 재귀적으로 해결한 뒤, 그 해답을 결합하여 원래 문제를 해결하는 방법이다. ❗분할정복 기본 원리 분할 (Divide):문제를 더 작은 하위 문제로 나눈다.문제를 동등한 크기의 여러 하위 문제로 분할한다.정복 (Conquer):각 하위 문제를 재귀적으로 해결한다.하위 문제들이 충분히 작아지면 재귀적으로 해결할 수 있으며 이를 기저 조건이라고 한다.기저 조건에서는 하위 문제를 더 이상 분할할 수 없는 상태에 도달한다.합병 (Combine):각각의 하위 문제에서 나온 해답을 합쳐 원래 문제의 해답을 구성한다. ❗예제result = "" # 현재 영역이 모두 같은 숫자로 이루어져 있는지 확인하는 함수def all_same(x, y, size):..
_니지
'🔻Computer Science' 카테고리의 글 목록