공부 63

A* 알고리즘 with Unity 03

힙 정렬 Heap sort 최대 힙 트리나 최소 힙 트리를 구성해 정렬을 하는 방법. 내림차순 정렬을 위해서는 최대 힙을 구성하고 오름차순 정렬을 위해서는 최소 힙을 구성 https://youtu.be/Xw2D9aJRBY44 이 알고리즘을 도입하여 좀 더 향상된 A* 알고리즘을 구현한다. 맵을 확장 시킨 뒤 경로 탐색에 대한 시간을 먼저 확인해본다. using System.Collections.Generic; using UnityEngine; using System.Diagnostics; using System; public class PathManager : MonoBehaviour { public Transform seeker, target; [SerializeField] private Grid gr..

A* 알고리즘 with Unity 02

결과 그림이다. Inspector 창에 Seeker (경로를 찾는 자), Target(경로 도착지)를 설정해준다. using System.Collections.Generic; using UnityEngine; public class Grid : MonoBehaviour { public LayerMask unwalkableMask; Node[,] grid; Vector2 gridSize; float nodeRadius; //노드 반지름 float nodeDiameter; //노드 지름 int gridXCount, gridYCount; //Grid X축 Node 갯수, Grid Y축 Node 갯수 private void Awake() { gridSize = new Vector2(40, 40); nodeRad..

INSERT DELETE UPDATE

use BaseballData; select* from salaries order by yearID DESC; --INSERT INTO [TableName] --VALUES [Values] INSERT INTO salaries values(2020,'KOR', 'NL', 'rookie', 90000000); --> 데이터 하나 빼먹으면 Error 발생 --> INSERT INTO salaries(yearID,teamID,playerID,lgID,salary) valueS (2020,'KOR','rookiss','NL',19000000) --DELETE FROM [TableName] --where [조건] -> 조건을 붙이지 않으면 테이블이 날라간다. DELETE FROM salaries WHERE pla..

A* 알고리즘 with Unity 01

using UnityEngine; public class Node { public bool IsWalkable; public Vector3 worldPosition; public int gridX, gridY; // 노드의 현재까지 움직인 비용. public int gCost; // 노드가 도착점까지 예상되는 비용. public int hCost; //비용의 총합 public int Fcost { get => gCost + hCost; } public Node(bool walkable, Vector3 pos, int x, int y) { this.IsWalkable = walkable; worldPosition = pos; gridX = x; gridY = y; } } 노드에 비용을 넣는다. player..

GROUP BY

2004년 보스턴 소속으로 출전한 선수들의 타격 정보 select* from batting where yearID = 2004 and teamID = 'BOS' 2004년도 보스턴 소속으로 출전해서 날린 홈런 개수 SELECT SUM(HR) FROM batting WHERE yearID = 2004 AND teamID = 'BOS' 2004년도에 가장 많은 홈런을 날린 팀은? =>GROUP BY 로 구현할 수 있다. --팀별로 묶어서 뭔가를 분석하고 싶다 select teamID, count(teamID) as playerCount, sum(HR) AS homeRuns from batting where yearID = 2004 group by teamID -- 팀 아이디 그룹 중 2004년에 배팅 데이터..

연습문제

use BaseballData; /* playerID(선수ID) yearID(시즌 년도) teamID(팀 명칭, 'BOS' = 보스턴) G_batting(출전 경기 + 타석) AB(타수) H(안타) R(출루) 2B(2루타) 3B(3루타) HR(홈런) BB(볼넷) 1. 보스턴 소속 선수들의 정보들만 모두 출력 select * from batting where teamID is not null and teamID = 'BOS' 2. 보스턴 소속 선수들의 수는 몇명? (단, 중복은 제거) select COUNT(DISTINCE playerID) from batting where teamID is not null and teamID = 'BOS' 1655 3. 보스턴 팀이 2004년도에 친 홈런 개수 selec..

BFS (Breadth First Search) 너비 우선 탐색

BFS(너비 우선 탐색) 너비 우선 탐색은 넓게 탐색한다는 의미로 이해하면 편하다. 탐색의 경우 너무 보편적이고 코딩 테스트를 조금이라도 공부했다면 다 아는 내용이기 때문에 따로 설명은 하지 않겠다. 기존의 BFS를 구현할 때, 무식하게 구현하는 경우가 많았는데 역시 이 강의는 코드가 깔끔해서 좋다. 막 알고리즘을 배울때 무식하게 구현했던 나와는 다른 우아하고? 간단 명료한? 부럽다. 나도 저렇게 되야하는데... #include #include #include using namespace std; // DFS (Depth First Search) 깊이 우선 탐색 // 일단 갈 수 있는 방향0(깊이)을 가보고 탐색한다. // BFS (Breadth First Search) 너비 우선 탐색 // 출발점에서 ..

DFS (Depth First Search) 깊이 우선 탐색

DFS에 대한 개념은 너무나도 많아서 따로 적어놓지 않겠다. '못 먹어도 고!' 라는 개념이 있듯 DFS는 일단 갈 수 있는 길이면 가보고 탐색한다. #include #include using namespace std; // DFS (Depth First Search) 깊이 우선 탐색 // 일단 갈 수 있는 방향0(깊이)을 가보고 탐색한다. // BFS (Breadth First Search) 너비 우선 탐색 // 출발점에서 갈 수 있는 방향을 먼저 탐색 후 다음 방향을 설정한다. struct Vertex { //data }; vector vertices; vector adjacent; vector visited; void CreateGraph() { vertices.resize(6); adjacent ..

그래프 기초

흔히 쓰이는 그래프 모습이다. 데이터(사물, 개념 등) : 정점 정점을 이어주는 선 : 간선 으로 이루어져 있다. 지금 보는 그래프는 방향이 없는 양방향성 그래프이지만, 방향이 있는 그래프는 방향성, 가중치가 부여된 그래프는 가중치 그래프라고 이야기한다. 맞나? 가물가물한데... 방향 그래프 : 간선에 방향이 있는 그래프(간선에 화살표가 있으면 방향그래프) 무방향 그래프 : 간선에 방향이 없는 그래프 연결 그래프 : 두 정점 사이에 경로가 존재하는 그래프 완전 그래프 : 한 정점에서 모든 다른 정점과 연결되어 최대의 간선수를 가지는 그래프 인터넷에 검색해봤다. 역시 프로그래머는 구글링이지! 강의에서는 다양한 방법으로 노드 기초 작업을 구현해놓았다. 1. void CreateGraph_1() { struc..

오른손 법칙 향상 - stack 대입

#include "pch.h" #include "Player.h" #include "Board.h" #include void Player::Init(Board* board) { _pos = board->GetEnterPos(); _board = board; _path.clear(); _path.push_back(_pos); Pos pos = _pos; Pos dest = board->GetExitPos(); Pos front[4] = { Pos {-1,0},//UP Pos {0,-1},//LEFT Pos {1,0},//DOWN Pos {0,1},//RIGHT }; while (pos != dest) { //1.현재 바라보는 방향을 기준으로 오른쪽으로 갈 수 있는지 확인. //2.현재 바라보는 방향 기준으..