BFS : 파이썬으로 이해하는 BFS

파이썬으로 이해하는 bfs

BFS 란? BFS(Breadth First Search)는 그래프에서 발생하는 사건들을 검사 혹은 처리하기 위해 탐색하는 방법 중 하나 입니다. BFS는 그래프를 수준별로 탐색하여 다음 수준으로 이동하기 전에 주어진 노드의 모든 인접 노드를 방문하는 그래프 순회 알고리즘입니다. BFS vs DFS BFS와 같은 탐색 알고리즘에서 가장 먼저 비교되는 게 DFS인데요 BFS는 레벨별로 그래프를 탐색하여 다음 레벨로 이동하기 전에 주어진 … Read more

그래프 구조 : 그래프 정리 (종류, 트리와 관계, 표현, 장단점)

그래프 데이터 구조

“트리는 그래프의 일종이다” 라는 사실을 알게되서 그럼 “그래프 구조” 란 뭘까? 하고 살짝 찾아본다는 게…. 해외 문서까지 찾아가서 정리해버리게 되었네요…. 당장은 트리 구조에서 문제를 풀고 있지만 언젠가 다른 그래프 구조의 문제도 해결할 일이 생길 것 같아 기왕 트리를 정리하는 김에 그래프를 몽땅 정리해봤습니다. GeeksForGeeks라는 사이트에 graph가 너무 자세히 설명되어서 한 번 쭉 읽고 정리해보았습니다. “그래프” … Read more

브루트 포스 vs 그리디 알고리즘 (개념, 특징, 문제)

그리디 알고리즘, 브루트 포스(완전 탐색)의 개념, 특징, 예제 문제

“브루트 포스” 알고리즘 이름을 처음 들었을 때는 이름부터 포스가 느껴졌습니다… ㅎ 하지만 한글로는 “완전 탐색” 말 그대로 for 문으로 순회하면서 확인, 연산하는 프로세스를 의미합니다. “브루트 포스 알고리즘”이라는 개념을 몰라도 코딩 기초 과정에서 자연스레 사용했던 알고리즘이였던 것….! 그럼 이런 간단한 알고리즘은 사용하면 안되는 알고리즘일까요? 그리고 그리디 알고리즘은 무엇일까요? 브루트 포스랑 비슷한 알고리즘 일까요? 브루트 포스 (완전 … Read more

파이썬 deque : 큐 (Queue) 개념과 사용법

파이썬 deque

큐는 FIFO(선입선출) 원칙을 따르는 데이터 구조입니다. (“파이썬 deque”가 queue의 일종) 사람들이 줄을 서서 기다리게 queue라고 생각하시면 됩니다. 먼저 도착한 사람이 가장 먼저 빠져나갑니다. 실제로 “queue”는 대기줄을 의미하는 단어입니다. queue에서 요소는 후면(끝)에 추가되고 전면(전면)에서는 제거됩니다. 아래 그림을 확인해주세요. 큐 (Queue)는 언제 사용하는 걸까? 큐 자료구조의 특성에 맞게 시퀀스의 양쪽 끝에서 효율적인 삽입 및 삭제 작업이 중요한 … Read more

Compilation과 Interpretation의 차이점

Compilation과 Interpretation의 차이점 Compilation 컴파일은 프로그램의 소스코드 전체를 기계어나 중간코드로 한번에 번역하는 것을 말합니다. 이 프로세스는 컴파일러에 의해 수행됩니다. 컴파일은 프로그램이 실행되기 전에 발생합니다. 컴파일된 코드는 필요할 때마다 실행할 준비가 되어 있습니다. 컴파일된 코드는 번역이 미리 이루어지기 때문에 실행 속도 측면에서 더 효율적인 편입니다. Interpretation Interpretation이란 프로그램의 소스코드를 기계어로 번역하거나 필요에 따라 한 줄씩 실행하는 … Read more

해시 테이블 정리

해시 테이블

“해시 테이블“은 키-값 쌍을 효율적으로 저장하고 검색할 수 있는 강력한 데이터 구조입니다. 체계적이고 매우 빠른 주소록이라고 생각하면 됩니다. 이를 통해 고유 식별자를 기반으로 정보를 빠르게 찾을 수 있습니다. 해싱의 개념 해시 테이블의 핵심은 해싱 개념입니다. 해싱은 저장하려는 각 정보에 대해 고유한 지문을 생성하는 것과 같습니다. 고유 식별자(키) 각 정보에는 키라고 하는 고유 식별자가 있습니다. 예를 … Read more

연결 리스트 : 초보자도 파이썬으로 이해하는 자료구조

연결 리스트

기본적으로 “연결 리스트”는 요소가 노드에 저장되는 선형 데이터 구조입니다. 배열과 달리 연결된 목록에는 연속적인 메모리 공간이 필요하지 않습니다. 대신, 각 요소(노드)에는 데이터와 시퀀스의 다음 노드에 대한 참조(링크 또는 포인터)가 포함됩니다. 노드 연결 리스트는 “데이터 + 포인터”를 포함하는 컨테이너인 노드로 구성되어 있습니다. 데이터: 정수, 문자 또는 기타 데이터 유형과 같이 저장하려는 실제 정보입니다. 다음 포인터: 시퀀스의 … Read more

정적 배열, 동적 배열 : 초보자도 파이썬으로 이해하는 자료구조

파이썬 배열 자료구조

코딩 여정을 시작할 때 자료구조의 기본 사항을 이해하는 것이 중요합니다. 자료 구조란 데이터 구조 + 연산 을 의미합니다. 이번에는 “배열“에 대해 공부한 내용을 정리해보았습니다. 배열에는 배열의 크기를 미리 정하는지 여부에 따라 정적 배열과 동적 배열로 나뉩니다. 정적 배열 Static Arrays 정적 배열이란? 정적 배열은 각 상자에 고유 번호가 붙은 일련의 상자로 생각하면 됩니다. 각 상자에는 … Read more

시간 복잡도, 공간 복잡도 요약 정리

시간 복잡도와 공간 복잡도에 대한 공부한 내용을 정리해 보았습니다. 시간 복잡도 시간 복잡도는 입력 크기가 증가함에 따라 알고리즘의 실행 시간이 어떻게 증가하는지를 측정한 것입니다. Big-O 표기법은 최악의 시나리오에서 알고리즘의 시간 복잡도의 상한을 표현하는 방법입니다. 이는 특정 하드웨어, 상수 요소 또는 하위 항의 세부 사항에 얽매이지 않고 알고리즘의 효율성을 분석하는 데 도움이 됩니다. Big-O는 다음과 같이 … Read more

스택 자료구조 : 스택을 활용하여 알고리즘 풀기

스택 자료구조

이번 포스트에서는 “스택 자료구조”를 정리했습니다. 자료구조란 “구조+연산” 이기 때문에 이러한 특징을 살펴보고, 이를 이용한 알고리즘 문제를 풀어보았습니다. 스택 구조 스택은 데이터를 한쪽으로만 넣을 수 있으며, 중간에 있는 데이터를 삭제할 수 없습니다. 가장 큰 특징은 후입선출 (LIFO: Last-In-First-Out) 형식의 선형 자료구조입니다. 후입선출 (LIFO): 스택 vs. 큐 vs. 리스트: 스택 자료구조 연산 스택(stack) 데이터 구조에 필요한 기본 연산들 스택 … Read more