[Lisp] Chapter 12 구조체(Structures)
·
Major/Lisp
1. Types - type & type-of : 어떤 데이터 타입인지 - (typep '변수 '데이터타입) = t/nil - (type-of '변수) = 데이터 타입리턴 - (typep #'list 'funtion) 함수는 #' 붙여줘야함 2. Structures - Structures: 내가 정의한 데이터타입 - DEFSTRUCT: 새로운 데이터 타입 정의 (defstruct starship (captain nil) (name nil) (speed 0) (condition ‘green) (shields ‘down)) (setf s1 (make-starship)) //구조체 선언 (starship-captain) //구조체안 변수 접근 - 응용 (defun alert (x) ;; causing a st..
[Lisp] Tic-Tac-Toe 게임 실습(1)
·
Major/Lisp
1. Tic-Tac-Toe 게임이란? - 위와 같은 3*3 보드가 있을 때, O와 X가 차례대로 두면서 O나 X가 가로/세로/대각선으로 연속 3개를 두면 이기는 게임이다. (자세한 설명은 : 틱택토 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)) 2. 구현 1) 전역변수/ 상수 선언 (defconstant One 1) (defconstant TheOther 10) (defvar *Opponent* One) (defvar *Computer* TheOther) 2) makeBoard : 보드를 만드는 함수 (defun makeBoard () (list ‘Board 0 0 0 0 0 0 0 0 0)) 3) convert-to-letter : one을 0로, the other을 x로 바꾸는 함..
[Lisp] Chapter 10 Assignment
·
Major/Lisp
1. Updating a variable (defvar *total-glasses* 0) (defun sell (n) "전역 변수 사용" (setf *total-glasses* (+ *total-glasses* n)) (format t "~&Total ~S glasses." *total-glasses*)) - total-glasses 라는 전역변수를 선언하고, sell이라는 함수로 전역 변수의 값을 바꿔준다. - 변수의 값을 변경시키는 방법은 보통 3가지가 있다. ⓐ (setf NumVar (+ NumVar 5)) ⓑ (incf NumVar 5) ⓒ (decf NumVar) 2. Destructive Operations 1) Destructive Operations는 값을 변경 시켜주는 오퍼레이션이다. ..
[자료 구조] 최단 경로 - 다익스트라(Dijkstra) 알고리즘 개념 및 구현 *
·
Major/Data Structure
1. 최단 경로 - 최단 경로 문제는 정점 i와 j를 연결하는 경로 중에서 간선들의 가중치 합이 최소가 되는 경로를 찾는 문제이다. - 최단 경로를 찾는 대표적인 알고리즘으로 다익스트라, 플로이드 워셜, 벨만포드가 있다. 2. 최단 경로 알고리즘 1) 다익스트라(Dijkstra) ① 개념 : 하나의 시작 정점으로부터 모든 다른 정점까지의 최단 경로를 찾는 알고리즘이다. ※ 조건 : 음수 가중치와 음수 사이클은 없다고 가정한다. ② 동작 과정 - 시작점으로부터 가장 가까운 정점을 방문 - 방문한 정점에서 인접한 정점들에 대해 거리를 갱신 위와 같은 그래프가 있을 때, v0을 시작노드라고 하면 아래와 같이 거리가 갱신된다. v0 v1 v2 v3 v4 v5 0 50 10 INF 45 INF 그다음 노드를 v2..
[자료 구조] 최소 신장 트리(MST) 개념 및 구현(Kruscal, Prim)
·
Major/Data Structure
1. 최소 신장 트리 - 연결된 그래프 G(V.E)의 신장 트리란, 그래프 내의 모든 정점을 포함하는 트리다. - 이 트리는 모든 정점들이 연결되어 있어야 하고, 사이클이 없어야 한다. - 에지에 가중치가 주어진 그래프 G에서 G의 신장 트리 중에 에지 가중치 합이 최소가 되는 신장 트리를 최소 신장트리라고 한다. 2. 최소 신장 트리 알고리즘 1) 크루스칼(Kruskal)의 알고리즘 - 크루스칼의 알고리즘은 탐욕적인(greedy method) 방법을 이용한다. - 탐욕적인 방법이란 선택할 때마다 그 순간 가장 좋다고 생각 되는 것을 선택함으로써 최종적인 해답에 도달하는 방법 👉 알고리즘 - 가중치가 최소인 간선을 추가해가며 트리를 만들어 간다. - 만약에 간선을 추가해서 사이클이 만들어 진다면 그 간선..
[자료구조] 그래프 순회(Graph Traversal) 개념 및 구현
·
Major/Data Structure
1. 그래프 순회 - 그래프 순회란 정점과 에지를 체계적으로 방문하는 것을 말한다. ⓐ 깊이 우선 탐색(depth first search_DFS) : 전순위 순회 일반화 ⓑ 너비 우선 탐색(Breadth first search_BFS) : 레벨순위 순회 일반화 2. 깊이 우선 탐색(DFS) 1) 알고리즘 ① 먼저 정점 v를 방문 한 다음 ② v에 인접한 정점 중에서 방문하지 않는 정점 w를 찾아서 w에 대한 DFS를 재귀적으로 수행한다. 2) 구현 #include #include using namespace std; #define MAX_NODE 100 bool visited[MAX_NODE]; vector v[MAX_NODE]; void DFS(int x){ visited[x] = true; print..
[Lisp] Ch 9 - Input/Output
·
Major/Lisp
1. 문자열 - 문자열은 symbol이 아님 - SRINGP는 문자열임을 판단해주는 함수 2. Format - 기본 반환값은 nil 이다 - 사이드 효과로 화면이나 파일에 쓰여진 글을 출력함 - 첫번째 매개변수는 format을, 두번째 매개변수는 문자열이다. 🧀 기본 format (format t “Hi, mom!”) //t: format(T에 출력하고 싶은 문자열을 두번째 매개변수에 넣는다.) 🧀 서식문자 ~%: new line 줄바꿈 ~&: new line if it is not at the beginning of a new line 새로운 줄이 아니면 줄바꿈 ~S: S-expression being inserted, 삽입할 거 ~A: without using escape characters 제어문자..
[Lisp] CH 8 - Recursion(재귀)
·
Major/Lisp
🥝 홀수찾는 함수(anyoddp) (defun anyoddp (x) (cond ((null x) nil) //x가 null이라면 nil 출력 ((oddp (first x)) t) //x의 첫번째 원소가 홀수라면 출력 (t (anyoddp (rest x))))) //둘다 아니라면 rest x가 재귀로 들어감 🥝 팩토리얼 함수(factorial) (defun fact (n) (cond ((zerop n) 1) (t (* n (fact (- n 1)))))) 🥝 리스트 원소개수(count-slices) (defun count-slices (loaf) (cond ((null loaf) 0) (t (+ 1 (count-slices (rest loaf)))))) 🥝 첫번째 원자 찾는 함수(find-first-ato..
[자료구조] 그래프 개념 및 구현(인접 리스트)
·
Major/Data Structure
1. 그래프의 개념 그래프(Graph)란, 노드(N)과 노드를 연결하는 간선(E)을 하나로 모아 놓은 자료 구조이다. 2. 대표적인 용어 정점(Vertex) : 노드의 위치 엣지(Edge) : 간선, 즉 노드들을 연결하는 선 분지, 차수(Degree) : 무방향 그래프에서 하나의 정점에 인접한 정점의 수 사이클(Cycle) : 시작 정점과 종료 정점이 동일한 경우 연결 성분(Connected component) : 서로 연결되어 있는 각각의 그래프의 개수(부분 그래프의 개수) 3. 그래프 종류 방향 그래프 : 간선에 방향이 있는 그래프(간선에 화살표가 있으면 방향그래프) 무방향 그래프 : 간선에 방향이 없는 그래프 연결 그래프 : 두 정점 사이에 경로가 존재하는 그래프 완전 그래프 : 한 정점에서 모든 ..