반응형

2024/09 63

[TIL] DFS 깊이 우선 탐색 BFS 너비 우선 탐색

그래프를 탐색하는 방법에는DFS 깊이 우선 탐색과 BFS 너비 우선 탐색이 있다 그래프에 대한 설명은 그래프 종류와 표현 방식에 정리해 놨다 1. DFSDepth-First Search, 깊이 우선 탐색 최대한 깊이 내려가고, 더 이상 깊이 내려갈 곳이 없을 경우 옆으로 이동모든 노드를 방문하는 경우에 사용한다 * 스택 또는 재귀를 이용해서 구현 시간 복잡도 - 인접 리스트 O(V+E), 인접 행렬 O(V^2)   DFS 기본 원칙"앞으로 찾아 가야할 노드" 와 "이미 방문한 노드" 를 기준으로 데이터 탐색한다경로 찾기, 탐색 문제, 백트래킹, 사이클 탐지 등에 유용하다 DFS 코드 구현탐색 순서1 - 2 - 4 - 5 - 3 - 6 4 방문 후 2로 백트래킹하여 5를 방문하고, 다시 2 - 1로 백트래..

TIL/Python 2024.09.21

[백준] 1991 트리 순회 Python

1. 문제이진 트리를 입력 받아, 전위 순회 Preorder, 중위 순회 Inorder, 후위 순회 Postorder Traversal 한 결과를 출력하는 프로그램을 작성하시오 (이진 트리 노드의 개수 1 * 전위 순회 - 루트 - 왼쪽 자식 - 오른쪽 자식* 중위 순회 - 왼쪽 자식 - 루트 - 오른쪽 자식* 후위 순회 - 왼쪽 자식 - 오른쪽 자식 - 루트입력 순서는 각 노드와 왼쪽 자식 노드, 오른쪽 자식 노드 순이고노드 이름은 A 부터 차례대로 알파벳 대문자로 매겨진다 항상 A 가 루트 노드이고, 자식 노드가 없는 경우 . 으로 표현한다 2. 알고리즘 분류 는 없었고, 정글에서 [다루는 주제: 그래프 탐색 기본] 로 기재해줬다 3. 접근 방식이진 트리와 이진 트리 순회에 대한 개념을 먼저 정리했다..

알고리즘 2024.09.21

[TIL] 그래프 종류와 표현 방식

그래프연결되어 있는 객체 간의 관계를 표현하는 비선형 자료 구조그래프의 정의그래프 G 는 (V, E) 로 표시한다 추가로 알아보니, 코드에서는 E (간선의 집합)을 직접적으로 사용하지 않고, 코드에서는주로 V (정점의 집합)과 그래프의 인접 리스트나 인접 행렬을 통해 간선을 간접적으로 표현한다고 한다다시 정리하면, (V, E) 는 그래프에서 V 라는 이름의 정점들이 있고, 그 정점을 사이를 연결하는 E 라는 이름의 간선들이 있다는 것을 의미한다따라서 (V, E) 표기는 그래프의 구조를 간단하고 명확하게 나타낼 수 있기 때문에알고리즘을 설계하거나 설명할 때 주로 사용한다고 한다  V - Vertex 정점, 여러 가지 특성을 가질 수 있는 객체, Node E - Edge 간선, 정점들 간의 관계, Link..

TIL/Python 2024.09.20

[정글] Week02 진행 내용

Week02 기간 2024.09.20 FRI - 09.26 THU 조원 ㅎㅂ ㅎㅇ (ㅎㅇ은 갠플, ㅎㅂ와 둘이 진행) 1. 문제 풀이No문제 알고리즘 분류키워드 공부난이도진행 여부 11991 트리 순회트리, 재귀이진 트리 순회, 클래스와 객체 하 진행25639 이진 검색 트리  하 31197 최소 스패닝 트리  하 41260 DFS 와 BFS  하 진행 511724 연결 요소와 개수  하 62606 바이러스  하 711725 트리의 부모 찾기  중 81707 이분 그래프  중 921606 아침 산책  중 1014888 연산자 끼워넣기  중 112573 빙산  상 122617 구슬 찾기  상 132178 미로 탐색  하 1418352 특정 거리의 도시 찾기 힙큐 heapq하 시간초과151916 최소 비용..

[TIL] 클래스와 객체

클래스 Class객체를 만들기 위한 설계도 (템플릿 역할)객체 Instance클래스를 기반으로 만들어진 구체적인 실체각 인스턴스는 클래스에서 정의한 속성과 메서드를 가진다 node_a = Node('A') # node_a 는 Node 클래스의 객체 self 의 역할1. 자기 참조 클래스 내에 메서드가 호출될 때, 그 메서드가 소속된 객체 자신을 참조한다 즉, 클래스의 인스턴스 (객체) 자신을 가리킨다 2. 객체의 속성과 메서드 접근self 를 통해 각 객체의 속성이나 메서드에 접근할 수 있다그래서 각 객체가 독립적으로 데이터를 저장하고 동작할 수 있다 class Node: def __init__(self, value): self.value = value # self.value 는 현재 객체의 va..

TIL/Python 2024.09.20

[TIL] 이진 트리 순회

트리 Tree 노드들이 나무 가지처럼 연결된 비선형 계측적 자료 구조 트리 구조를 왜 사용하는가?선형 데이터 구조로는 계층형 구조를 나타낼 수 없기 때문에 트리의 구조는 '데이터 저장'의 의미보다는'저장된 데이터를 더 효과적으로 탐색'하기 위해 사용한다  트리의 구조 노드 Node트리를 구성하고 있는 기본 요소노드에는 키 또는 값과 하위 노드에 대한 포인터를 가지고 있다 간선 Edge노드와 노드 간의 연결선루트 노트 Root Node트리 구조에서 부모가 없는 최상위 노드부모 노드 Parent Node자식 노드를 가진 노드자식 노드 Child Node부모 노드의 하위 노드 형제 노드 Sibling Node같은 부모를 가지는 노드깊이 Depth루트에서 어떤 노드까지의 간선 Edge 수높이 Height어떤 노..

TIL/Python 2024.09.20

[TIL] 덱 deque Double-Ended Queue

18258 큐2 시간 초과 떠서 해결 방안을 찾아보다가 deque 를 공부해 보기로 했다 덱 dequeDouble-Ended Queue, 양쪽에서 요소를 추가하거나 제거할 수 있는 자료 구조 Python 에서는 collections 모듈에서 제공되며, 스택과 큐의 기능을 모두 가지고 있다from collections import dequequeue = deque('Hello')print(queue)# 실행 결과# deque(['H', 'e', 'l', 'l', 'o']) list.pop() 과 deque.popleft() 의 차이  pop() - list 에서 제일 마지막을 제외한 특정 인덱스의 원소를 삭제하기 위해서는그 원소 뒤의 모든 원소들을 한 칸씩 앞으로 옮겨야 하기 때문에 시간 복잡도 O(n) ..

TIL/Python 2024.09.19

[정글] 다시 쓰는 Week01 회고

Week01 가 끝난 09/11 WED 에 회고를 나름 끄적끄적 작성하긴 했지만ㅎㅂ님이 KPT 라는 좋은 글쓰기 방법을 공유해 주어, 다시 작성해 보는 Week01 회고 Keep. 좋았거나 계속 유지할 것1. 어제보다 성장하기 정글에 와서 처음으로 러닝을 시작했다, 마지막으로 뛰었던 기억은 고등학생 시절 50m 11.2초,러닝 첫 날은 반 바퀴 뛰는 것도 숨이 차고 다리도 마음 같지 않아 힘들었지만,칭구들이 기다려주고 호흡법도 알려주고 페이스도 맞춰줘서 트랙 4바퀴 1.7km 를 뛸 수 있었다그리고 5번째 러닝을 하는 날에는 6시a.m. 에 7명이 모여 힘차게 5바퀴 2.14km 를 뛰었다운동을 좋아하는 거에 비해서 몸이 잘 안 따라주는 편인데, 이렇게 하루하루 성과가 쌓이면더 많이, 더 빨리, 더 편..

[백준] 18258 큐2 Python

1. 문제정수를 저장하는 큐를 구현한 다음, 입력으로 주어진 명령을 처리하는 프로그램을 작성하시오  2. 알고리즘 분류* 자료 구조* 큐 3. 접근 방식큐 개념 정리 와 스택 개념 정리 도 했겠다, Stack 문제 풀이와 비슷하게 하면 되지 않을까? LIFO 인지 FIFO 인지만 구분하면 되니까! + 라고 생각했지만, 시간 초과가 떠서 검색해 보니Queue 용도로 사용할 때는 deque 를 쓰는 게 좋다고 해서 deque 에 대해 공부했다 deque 개념 정리 4. 전체 코드첫번째 시도 10828 Stack 과 같은 개념으로 큐를 구현했다# 정수를 저장하는 큐를 구현한 다음,# 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오# push x - 정수 x 를 큐에 넣는 연산# pop - 큐에서 가장 ..

알고리즘 2024.09.19

[백준] 10828 스택 Python

1. 문제정수를 저장하는 스택을 구현하고, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오 2. 알고리즘 분류* 구현 * 자료 구조* 스택 3. 접근 방식키워드 공부하면서 Stack 개념 에 대해 정리해 둔 것이 도움이 되었다그리고 pop() 을 만들 때 그대로 .pop() 을 써도 되지만, 이왕 만드는 거 다른 방법으로 만들어 보고 싶어서stack[-1] 을 다른 변수 lastpang 에 저장하고, stack[-1] 을 del 로 지운 후,그 변수 lastpang 을 출력하는 방식으로 구현해 보았다def pop(): # print(stack.pop() if stack else -1) if stack: lastpang = stack[-1] del stack[-1..

알고리즘 2024.09.19
반응형