용어: 자료구조, 데이터 구조, data structure대량의 데이터를 효율적으로 관리할 수 있는 데이터의 구조를 의미코드상에서 효율적으로 데이터를 처리하기 위해, 데이터 특성에 따라, 체계적으로 데이터를 구조화해야 함어떤 데이터 구조를 사용하느냐에 따라, 코드 효율
데이터를 나열하고, 각 데이터를 인덱스에 대응하도록 구성한 데이터 구조파이썬에서는 리스트 타입이 배열 기능을 제공하고있음같은 종류의 데이터를 효율적으로 관리하기 위해 사용한다.같은 종류의 데이터를 순차적으로 저장한다.'배열(array)'은 자료구조의 기본 형태 중 하나
큐(Queue)는 컴퓨터 과학에서 자주 사용하는 중요한 자료구조 중 하나로, 항목들이 'FIFO'(First-In, First-Out, 선입선출) 순서로 추가되고 제거되는 특징을 가지고 있다. 이는 실생활에서 줄을 서는 것과 비슷한 개념으로 생각할 수 있다. 줄의 첫
한쪽 끝에서 자료를 넣거나 뺼 수 있는, 데이터를 제한적으로 접근할 수 있는 구조스택(Stack)은 컴퓨터 과학에서 매우 중요한 자료구조 중 하나다. 스택은 항목들이 쌓여 있는 구조를 뜻하며, LIFO(Last-In, First-Out) 원칙을 따른다. 이 말은, 가장
연결 리스트라고도 한다.배열은 순차적으로 연결된 공간에 데이터를 나열하는 데이터 구조이다.링크드 리스트는 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조이다.링크드 리스트(linked list)는 컴퓨터 과학에서 사용하는 기본적인 선형 자료 구조
알고리즘을 설계하고 구현할 때는 이러한 복잡도를 최소화하려고 노력해야 한다. 그 이유는 시간 복잡도가 높은 알고리즘은 실행 시간이 길어져 사용자에게 대기 시간을 늘리며, 공간 복잡도가 높은 알고리즘은 많은 메모리를 사용하여 시스템의 다른 부분이 필요로 하는 메모리를 줄
해시 테이블은 키(key)를 값(value)에 연결하여, 각 키가 고유한 값을 갖도록 하는 데이터 구조다. 이는 키를 이용하여 데이터를 빠르게 검색하는 데 매우 유용하다. 해시 테이블은 효율적인 검색, 삽입, 삭제를 위해 해시 함수를 사용하여 키를 해시 코드로 변환하고
트리(tree)는 계층적 관계를 표현하는 자료구조다. 용어만 들으면 복잡해 보일 수 있지만, 사실 우리 일상 생활에서도 트리 구조를 많이 접하고 있다. 가족 트리나 조직도 등이 대표적인 예이다.트리 구조는 노드(node)들의 집합으로, 노드들은 부모-자식 관계를 갖는다
"힙(heap)"은 이진 트리를 기반으로 한 특수한 트리 기반 데이터 구조다. 데이터에서 최댓값과 최솟값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree)이며, 힙에는 두 가지 주요한 속성이 있다.최대 힙 (Max Heap): 각 노드의
알고리즘 계산 복잡도는 다음 두 가지 척도로 표현될 수 있다.시간 복잡도: 얼마나 빠르게 실행되는지공간 복잡도: 얼마나 많은 저장 공간이 필요한지좋은 알고리즘은 실행 시간도 짧고, 저장 공간도 적게 쓰는 알고리즘통상 둘 다를 만족시키기는 어려움이 있다.시간과 공간은 반
알고리즘을 잘 작성하기 위해서는 잘 작성된 알고리즘을 이해하고, 스스로 만들어봐야 함모사! 그림을 잘 그리기 위해서는 잘 그린 그림을 모방하는 것부터 시작이번 챕터부터 알고리즘 시작입니다.!연습장과 펜을 준비알고리즘 문제를 읽고 분석간단하게 테스트용으로 매우 간단한 경
삽입 정렬은 두 번째 인덱스부터 시작해당 인덱스(key 값) 앞에 있는 데이터(B)부터 비교해서 key 값이 더 작으면, B값을 뒤 인덱스로 복사이를 key 값이 더 큰 데이터를 만날때까지 반복, 그리고 큰 데이터를 만난 위치 바로 뒤에 key 값을 이동다음 단계를 밟
다음과 같은 순서를 반복하며 정렬하는 알고리즘주어진 데이터 중, 최소값을 찾음해당 최소값을 데이터 맨 앞에 위치한 값과 교체함맨 앞의 위치를 뺀 나머지 데이터를 동일한 방법으로 반복함데이터가 두 개 일때예: dataList = [9, 1]data_list[0] > d
재귀용법(Recursive Call)은 함수가 자기 자신을 다시 호출하는 것을 의미한다. 재귀는 알고리즘을 설계 및 구현할 때 매우 유용한 방법 중 하나로, 복잡한 문제를 더 작은 하위 문제로 나누어 해결하는 분할 정복(Divide and Conquer) 전략의 핵심
동적 계획법 (Dynamic Programming, DP)은 복잡한 문제를 더 작은 하위 문제로 나누어 해결한 후, 그 결과를 저장하고 사용하여 큰 문제를 해결하는 알고리즘 설계 기법(최하위에서 해답을 구한 후, 이를 저장하고, 해당 결과값을 이용해서 상위 문제를 푸는
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.이 문제는 타일 채우기 문자로, 피보나티 수열을 활용하여 해결할 수 있다.이 문제의 해결 방법을 이해하는 데 필요한 핵심은 2×n 크기의 직사각형을 채울 때 마지막 타일이
퀵 정렬(quick sort)
배열을 더 이상 나눌 수 없을 만큼 작은 부분으로 분할한 다음, 이를 다시 병합하면서 정렬한다.합병 정렬은 다음의 단계들로 이루어진다.분할(Divide): 주어진 배열을 크기가 같은 두 개의 하위 배열로 나눈다. 만약 배열의 크기가 홀수라면, 하나의 하위 배열이 나머지
이진 탐색(Binary Search)은 정렬된 데이터셋에서 특정한 값을 효율적으로 찾기 위한 알고리즘이며, 분할 정복 전략을 사용하여 작동한다.정렬된 리스트에서 중간 값(middle value)을 선택한다.중간 값이 찾고자 하는 값(target value)과 같다면,
순차 탐색(Sequential Search)은 가장 기본적인 검색 알고리즘이다. 데이터가 정렬되어 있지 않거나 아무런 정보가 없을 때 주로 사용된다. 이 방법은 리스트의 각 요소를 하나씩 차례대로 접근하여 찾고자 하는 값을 비교한다.리스트의 첫 번째 요소부터 시작하여
문제N개의 정수 A\[1], A\[2], …, A\[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.입력첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A\[1], A\[2], …, A\
그래프는 여러 노드(Node)들이 여러 간선(Edge)에 의해 연결되어 있는 구조를 말한다. 그래프는 실제 세계의 여러 문제 상황을 모델링하기 위해 사용되며, 컴퓨터 과학 및 여러 응용 분야에서 널리 활용되고 있다.노드(Node 또는 Vertex): 그래프의 개별 요소
깊이 우선 탐색 (Depth-First Search, DFS)은 그래프의 모든 노드를 방문하는 알고리즘 중 하나이다. DFS는 현재 노드와 인접한 노드를 재귀적으로 탐색하며, 그래프의 깊숙한 곳까지 우선 탐색한다. 이런 방식 때문에 "깊이 우선"이라는 이름이 붙었다.시
너비 우선 탐색(BFS, Breadth-First Search)은 그래프나 트리를 탐색할 때 사용하는 알고리즘 중 하나입니다. BFS는 이름에서 알 수 있듯이 '너비를 우선으로 탐색'하는 방법으로, 시작 노드에서 가장 가까운 노드부터 차례대로 탐색합니다.BFS의 특징: