스택 스택은 한쪽 끝에서만 데이터를 넣고 뺄 수 있는 제한적으로 접근할 수 있는 후입선출(Last-In-First-Out) 형태의 선형 자료구조이다. 스택 상단 : 스택에서 입출력이 이루어지는 부분 스택 하단 : 스택의 바닥 부분 요소 : 스택에 저장되는 것 공백 스택 : 스택에 요소가 없는 상태 스택의 is_empty 연산 is_empty(S): if top == -1 then return TRUE else return FALSE 스택의 is_full 연산 is_full(S): if top >= (MAX_STACK_SIZE-1) then return TRUE else return FALSE 스택의 push 연산 push(S, x): if is_full(S) then error "overflow" els..
전체 글
순환순환(recursion)이란 어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법ex) 팩토리얼, 피보나치, 이항계수 계산, 이진 탐색, DFS... 내부적인 구현복귀주소가 시스템 스택에 저장되고 호출되는 함수를 위한 매개변수와 지역 변수를 스택으로부터 할당받는다. 이러한 함수를 위한 시스템 스택에서의 공간을 활성 레코드라 한다. 순환 알고리즘의 구조자기 자신을 순환적으로 호출하는 부분과 순환 호출을 멈추는 부분으로 구성되어 있다. 순환의 원리주어진 문제를 더 작은 동일한 문제들로 분해하여 해결하는 방법으로 분할정복(divide and conquer)이라 한다.순환호출이 일어날 때마다 문제의 크기가 작아진다.문제의 크기가 점점 작아지면 풀기가 쉬워지고 결국은 풀기 쉬운 문제가..
자료구조: 자료들을 정리하여 보관하는 구조 -> 스택 큐 등등 프로그램프로그램 = 자료구조 + 알고리즘ex) scores[] + for i 알고리즘입력 : 0개 이상의 입력이 존재하여야 한다.출력 : 1개 이상의 출력이 존재하여야 한다.명백성 : 각 명령어의 의미는 모호하지 않고 명확해야 한다.유한성 : 한정된 수의 단계 후에는 반드시 종료되어야 한다.유효성 : 각 명령어들은 종이와 연필, 또는 커퓨터로 실행가능한 연산이어야 한다.
from collections import dequev, e = map(int, input().split())indegree = [0] * (v + 1)graph = [[] for i in range(v + 1)]for _ in range(e): a, b = map(int, input().split()) graph[a].append(b) indegree[b] += 1def topology_sort(): result = [] q = deque() for i in range(1, v + 1): if indegree[i] == 0: q.append(i) while q: now = q.popleft() result.a..
def find_parent(parent, x): if parent[x] != x: return find_parent(parent, parent[x]) return parent[x]def union_parent(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a
서로소 집합 알고리즘def find_parent(parent, x): if parent[x] != x: return find_parent(parent, parent[x]) return parent[x]def union_parent(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a 서로소 집합 사이클 판별def find_parent(parent, x): if parent[x] != x: return find_parent(parent, parent[x]) return parent[x]def union_parent(parent, a, b): a = fin..
INF = int(1e9)n = int(input())m = int(input())graph = [[INF] * (n + 1) for _ in range(n + 1)]for a in range(1, n + 1): for b in range(1, n + 1): if a == b: graph[a][b] = 0for _ in range(m): a, b, c = map(int, input().split()) graph[a][b] = cfor k in range(1, n + 1): for a in range(1, n + 1): for b in range(1, n + 1): graph[a][b] = min(graph[a][b], ..
import heapqimport sysinput = sys.stdin.readlineINF = int(1e9)n, m = map(int, input().split())start = int(input())graph = [[] for i in range(n + 1)]distance = [INF] * (n + 1)for _ in range(m): a, b, c = map(int, input().split()) graph[a].append((b, c))def dijkstra(start): q = [] heapq.heappush(q, (0, start)) distance[start] = 0 while q: dist, now = heapq.heappop(q) ..
n = int(input())arr = list(map(int, input().split()))d = [0] * 100# 3 1 1 5# 3 3d[0] = arr[0]d[1] = max(arr[0], arr[1])for i in range(2, n): d[i] = max(d[i - 1], d[i - 2] + arr[i])print(d[n - 1])
재귀함수 사용def binary_search(array, target, start, end): if start > end: return None mid = (start + end) // 2 if array[mid] == target: return mid elif array[mid] > target: return binary_search(array, target, start, mid - 1) else: return binary_search(array, target, mid + 1, end)n, target = list(map(int, input().split()))array = list(map(int, input().split()..
def sequential_search(n, target, array): for i in range(n): if array[i] == target: return i + 1input_data = input().split()n = int(input_data[0])target = input_data[1]array = input().split()print(sequential_search(n, target, array))