분류 전체보기 296

G.O.A.P ( Goal Oriented Action Planning )

G.O.A.P ( Goal Oriented Action Planning ) 목적 ( 상태 ) 을 달성하기 위한 일련의 행동 ( 액션 ) 을 계획하는 Planner 입니다. 복잡한 FMS 없이 의사결정을 달성할 수 있어 확장하기 용이합니다. G.O.A.P 에서 사용되는 용어는 아래와 같습니다. Action : 상태를 변화하는 행위 Preconditions : 전제조건 Effects : 효과 G.O.A.P 의 Plan 이 수립되는 흐름은 아래와 같습니다. Init State → ( conditon ) Action ( → effect ) → ( condition ) Action ... → Goal 계획 방식은 "backward chaning search" 를 사용하는데 과정은 아래와 같습니다. Add the ..

알고리즘/GameAI 2023.04.29

Alias method Algorithm

"Alias method" 를 사용하여 probability ( 확률 ) 기반의 RandomValue ( Index ) 를 얻고자 하는데 관련 한글 문서가 없었다. 영문 위키를 찾아봤지만 생략된 내용이 많아 이해하기 어려웠다. 구글링을 하다 좋은 영문 포스팅을 찾게 되었고 포스팅 : https://www.keithschwarz.com/darts-dice-coins/ 위키 : https://en.wikipedia.org/wiki/Alias_method 이를 통해 대략적인 원리를 이해하는데 도움을 받았다. 그래서 누군가에게 도움이 될까 싶어 이번 기회에 한글로 정리하고자 한다. 원문에서는 수식 및 공식이 많고 이미지가 많은데 최대한 정리하여 핵심 아이디어만 작성한다. Alias method 를 설명하기 전에..

알고리즘 2023.04.27

VS 2022 에서 js 개발 - (2)

(1) 에서 console empty project 로 진행하여, node.js 실행 결과만 확인할 수 있었다. 이번에는 web project 를 생성하여 진행한다. 프로젝트 구성은 위와 같다. npm 설치가 가능하고 "server.js" 파일이 기본으로 생성된다. server.js 이름으로 알 수 있듯이 server 를 구성하고 web browser 에서 js 수행을 기반으로 동작한다. server.js 구성은 아래와 같다. 'use strict'; var http = require('http'); var port = process.env.PORT || 1337; var fs = require('fs'); http.createServer(function (request, response) { http ..

언어/js 2023.04.25

VS 2022 에서 js 개발 - (1)

대부분의 js 개발은 VS Code 를 많이 사용한다. 하지만 VS 2022 를 설치한 환경에서도 js 프로젝트를 생성할 수 있다. 먼저, VS Installer 에서 아래 "Node.js 개발" 을 포함시켜 설치한다. 이후 VS 2022 를 실행하면 js 관련 프로젝트 선택이 나오는데 많은 template 을 제공하고 있다. 적절한 template 을 선택하고 실행하면 "node.js" 설치가 없다는 메세지를 확인할 수 있다.. 당황하지 말고 팝업 메뉴의 install node.js 를 선택하면 nodejs website 가 연결되며, 적절한 버전의 nodejs ( LTS ) 를 설치하고 VS 2022 를 다시 실행하자. 생성된 프로젝트 구성을 보면 재미있다. sln 파일도 있고.. obj, bin 폴..

언어/js 2023.04.23

boids

Boids 알고리즘은 많겠지만 간단한 알고리즘을 써봤습니다. youtube 영상에서 boids 시뮬레이션을 보고, gtihub 주소가 있어 확인했습니다. https://github.com/jackaperkins/boids GitHub - jackaperkins/boids: The age old boids project! The age old boids project! Contribute to jackaperkins/boids development by creating an account on GitHub. github.com 내용 중 boids 알고리즘 부분은 다소 간단하게 확인할 수 있습니다. "boids.pde" 내용으로 아래 절차를 따르고 있습니다. 1. update 1-1. collect boid..

알고리즘 2023.04.23

WalkieTalkie - 0

안녕하세요. 가제 ( WalkieTalkie ) 로 voip 가능한 chat program 을 구성해보려합니다. 구조는 dotnet 으로 서버를 구성하고 .NET MAUI 으로 클라이언트로 생각하고 있습니다. 첫 시작으로 server 를 만들겠는데요. VS IDE 를 실행하고 dotnet console program 으로 프로젝트를 시작하면 됩니다. Core 의 첫 단추는 socket 을 생성해야 합니다. 1. listen socket 을 만들어봅니다. listen socket 은 외부의 connection 요청을 받아 줄 수 있는 수신기라 생각하면 됩니다. 인터넷을 통해 통신을 하기 위해서는 발신자가 수신자의 주소를 알아야 합니다. 현재는 ip 와 port 로 그 주소를 지칭할 수 있습니다. ip 는 ..

올바른 괄호의 갯수

https://school.programmers.co.kr/learn/courses/30/lessons/12929 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 카탈랑 수 를 알면 쉽게 풀 수 있는 문제입니다. 저는 카탈랑 수를 몰랐기에 다른 블로거 분의 도움을 받아서 해결했습니다. 참고 function solution(n) { const c = new Array(n + 1).fill(0); c[0] = c[1] = 1; // c(n) = E(i=0..n){C(i)*C(n-i)} function get_c(i) { if(c[i] != 0) return c..

쿠키 구입

https://school.programmers.co.kr/learn/courses/30/lessons/49995 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 전체 쿠키를 순회하며 O ( n ) index ( m ) 를 기준으로 좌우에 최대 쿠키를 구합니다. 현재 기준 ( m ) 으로 부터 index ( left, right ) 를 움직이며 최대 쿠키를 찾습니다 O ( n ) 현재 쿠키가 같더라도 더 이상 움직일 index 가 없을 때까지 순회하여 전체 쿠키에서 가장 큰 쿠키를 구합니다. 총 O ( n^2 ) 에서 해결됩니다. function solut..

자동완성

https://school.programmers.co.kr/learn/courses/30/lessons/17685 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 입력받는 키워드 ( char ) 를 tree 로 만들고, 각 키워드를 순회하며 중복되지 않은 ( 겹치는 단어가 없는 ) node 에 도달하면 해당 node 의 depth 가 단어를 검색하는데 필요한 최소 단어 갯수이다. tree 를 만드는 전체 과정은 O(N*2) 이 수행되고, 단어를 찾는 과정은 O(N) 이 수행된다. function solution(words) { var rootDict = n..

무지의 먹방 라이브

https://school.programmers.co.kr/learn/courses/30/lessons/42891 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음에는 음식을 순회하면서 O(N^2) 문제를 접근했다. N = 음식, N = 시간 음식은 Set 에 등록하여 다 먹은 음식은 Set 에서 제거하는 방법으로 마지막 음식 ( t + 1 ) 의 index 를 구하여 정확성 테스트를 통과했지만, 효율성 테스트에서는 실패했다. 고민을 하다.. 다른 사람의 아이디어를 도움 받아 n 초 만큼의 음식을 먹는 과정을 O(1) 로 줄일 수 있었다. 아이디어는 음..