알고리즘 그래프 탐색 - DFS(깊이 우선 탐색)
·
TIL
DFS(깊이 우선 탐색)DFS(Depth-First Search)는 그래프나 트리 구조를 탐색하는 알고리즘 중 하나이다. 이 알고리즘은 가능한 한 깊이 들어가면서 탐색을 진행하고, 더 이상 탐색할 수 없을 때 백트래킹(backtracking)하여 다른 경로를 탐색한다. DFS는 주로 스택이나 재귀 함수를 사용하여 구현한다. 스택을 사용하면 명시적으로 방문할 노드를 관리할 수 있고, 재귀를 사용하면 함수 호출 스택을 이용하여 자동으로 백트래킹을 처리할 수 있다. 이 알고리즘의 특징은 한 경로를 끝까지 탐색한 후 다른 경로를 탐색한다는 점이다. 이는 미로 찾기나 경로 탐색 문제 등에서 유용하게 사용된다.  DFS 핵심 메커니즘DFS는 가능한 한 깊이 들어가면서 탐색을 진행한다. 한 경로를 끝까지 탐색한 후 ..
리턴은 단순한 관행인가? 파이썬에서 리턴을 사용하는 이유
·
TIL
0. 문제 의식의 출발  # 예제 코드 Aresult = 0def add(num): global result result += numadd(3)print(result)# return 사용하지 않음 # 결과값은 '3' 출력# 예제 코드 Bresult = 0def add(num): global result result += num return resultprint(add(3))# return 사용함# 결과값은 '3' 출력예제 A 코드와 B 코드는 동일한 기능이 구현되어 있다. 결과값도 같다. 차이는 리턴(return)의 사용 여부다. 나는 이 차이가 궁금해졌다. 과연 내가 진정으로 return 문의 의미를 알고 코드를 작성하는 것이 맞는지 의구심이 들었다. 이러한 의문은 많은 입문..
알고리즘 그래프 탐색 - BFS(너비 우선 탐색)
·
TIL
오늘은 그래프의 탐색 방법 중 BFS(너비 우선 탐색)에 대해 알아 보겠다. BFS(너비 우선 탐색)BFS(Breadth-First Search, 너비 우선 탐색)은 그래프 탐색 알고리즘 중의 하나이다. 한 노드에서 시작하여 인접한 모든 노드를 먼저 탐색한 후, 그 다음 레벨의 노드를 탐색하는 방식이다. 그래프나 트리 구조를 탐색할 때 사용되며, 보통 큐(Queue) 자료구조를 사용한다.  핵심 메커니즘BFS는 시작 노드로부터 가까운 노드부터 차례대로 탐색한다. 즉, 현재 레벨의 모든 노드를 탐색한 후에 다음 레벨로 이동한다.BFS는 일반적으로 큐 자료구조를 사용하여 구현된다. 이는 FIFO(First In, First Out) 원칙을 따르므로 노드를 방문한 순서대로 처리할 수 있다.BFS는 가중치 없는..
[TIL] 그래프 1편 - 그래프 정의, 특징, 종류, 구성 요소
·
TIL
그래프 이론 지식 맵그래프를 본격적으로 공부하기 전에 지식 지도를 머리 속에 넣어두고 시작하자. 각 개념이 전체 그래프 이론에서 어떤 위치를 차지하고 있는지 이해할 수 있을 것이다. 오늘 다룰 내용은 그래프의 기본 개념과 구성 요소 Vertex(또는 Edge), Node(또는 Arc)이다.   그래프(Graph)란?그래프는 노드(또는 정점)와 엣지(또는 간선)의 집합으로 구성된 추상적인 자료구조이다. 하지만 그래프 단순히 데이터를 저장하는 구조로만 이해하면 안된다. 그래프는 복잡한 관계를 모델링하고 분석하는 도구로서 알고리즘 설계와 문제 해결에 광범위하게 사용되기 때문이다. 다음은 그래프의 활용 분야와 예시다. 분야예시노드엣지활용소셜 네트워크 분석Facebook, LinkedIn사용자친구 관계친구 추천,..
[TIL] 컴퓨터 시스템 요약 - 1장. 컴퓨터 시스템으로의 여행 (1편)
·
TIL
Bryant O'Hallaron의 을 읽고 요약한 글입니다. C 언어 기준으로 작성되었습니다.  컴퓨터 시스템컴퓨터 시스템www.aladin.co.kr 들어가기 전에 컴퓨터 시스템은 하드웨어와 소프트웨어로 구성되며 이들이 함께 작동하여 응용프로그램을 실행한다. 하드웨어와 소프트웨어는 상호 의존적으로 작동한다. 소프트웨어가 하드웨어에 명령을 내리고, 하드웨어는 이 명령을 실행하여 결과를 만들어낸다. 이러한 상호작용을 통해 사용자가 원하는 작업을 수행할 수 있게 된다. 하드웨어:물리적인 장치들을 포함한다. 주요 구성요소로는 CPU(중앙처리장치), RAM(메모리), 하드 디스크, 마더보드 등이 있다. 입력장치(키보드, 마우스)와 출력장치(모니터, 프린터)도 포함된다. 소프트웨어:컴퓨터에서 실행되는 프로그램들이..
[TIL] Python 문자열(String)의 불변성(Immutability)
·
TIL
파이썬에서 문자열(string)은 불변(immutable) 객체입니다. 이는 한 번 생성된 문자열은 그 내용을 변경할 수 없다는 것을 의미합니다. 하지만 이게 정확히 어떤 의미일까요? 예제를 통해 살펴봅시다.1. 문자열 불변성 예제# 문자열 생성greeting = "Hello"# 문자열 변경 시도try: greeting[0] = "h"except TypeError as e: print(f"오류 발생: {e}")# 출력: 오류 발생: 'str' object does not support item assignment위 코드에서 우리는 greeting 문자열의 첫 번째 문자를 변경하려고 시도했지만, TypeError가 발생했습니다. 이는 문자열이 불변이기 때문입니다. 2. 그렇다면 문자열을 어떻게 ..
[TIL] 자료 구조와 배열 (Python) 5편 - 리스트와 튜플 활용하기
·
TIL
1. len() 함수는 가장 바깥쪽 컨테이너의 원소 개수만 셉니다. nested_list = [[1, 2], [3, 4]]print(len(nested_list)) # 2를 출력합니다, 내부 리스트의 원소는 세지 않습니다.원소 자체가 리스트(또는 튜플이나 집합인 경우) 경우 1개로 계산합니다. 2. min(), max() 함수로 배열의 최솟값과 최댓값 구하기 # 숫자 리스트numbers = [4, 2, 9, 7, 5, 1, 8, 3, 6]# 최솟값 구하기min_value = min(numbers)print(f"최솟값: {min_value}") # 출력: 최솟값: 1# 최댓값 구하기max_value = max(numbers)print(f"최댓값: {max_value}") # 출력: 최댓값: 9min(..
[TIL] 자료 구조와 배열 (Python) 4편 - 뮤터블과 이뮤터블 객체의 대입
·
TIL
1. 뮤터블(mutable) 객체의 대입  뮤터블 객체는 화이트보드와 같습니다. 화이트보드에 글을 쓰고 지우고 다시 쓸 수 있듯이, 뮤터블 객체도 생성 후에 내용을 변경할 수 있습니다. 여러 사람이 같은 화이트보드를 보고 있다면, 한 사람이 내용을 변경하면 모두가 그 변경을 볼 수 있습니다. 리스트(list), 딕셔너리(dict), 집합(set) 등이 해당됩니다.객체 생성 후 그 값을 변경할 수 있습니다.대입 시 객체의 참조가 복사됩니다."객체의 참조가 복사된다"는 말은 실제 데이터를 복사하는 것이 아니라, 데이터가 저장된 메모리 주소를 복사한다는 의미입니다.# 뮤터블 객체 (리스트) 예시original_list = [1, 2, 3]copied_list = original_list # 참조가 복사됨pr..