공부를 할 수 있다는 것은 부러운 일입니다. 하지만 우리는 기쁜 일로 생각하지 않죠? 싫은 일 좋은 일 가리지 말고 다 끌어안을 수 있는 사람이 됩시다. . .
개요 이전 포스팅에서 Websocket에 대한 기본적인 내용을 알아보았다. 스프링부트를 활용해서 프로젝트를 생성해서 테스트까지 진행해 볼 것이다. 스프링부트 프로젝트 생성 이렇게 설정하고 프로젝트를 만들어 주었다. 인텔리제이로 설정했지만, https://start.spring.io/ 에서 다운로드 받아 여는 방법도 있다. 참고) dependencies 설명 더보기 1. Spring Web Web MVC를 사용해 Web Application을 만드는 데에 필요한 스프링부트의 기본 요소를 가지며, 기본 내장 컨테이너로 아파치 톰캣을 가진다. 2. Spring Boot DevTools 더 나은 개발 경험을 위해 빠른 애플리케이션 재시작, 라이브 리로드 등을 제공한다. 3. WebSocket 서블릿 기반의 웹소..
개요 요즘 스프링 부트를 활용한 프로젝트를 진행하고 있는데, 그 프로젝트에서 사용할 기술 중 하나인 웹 소켓에 대해 공부하고 관련 내용을 공부하며 잊지 않기 위해 해당 포스트를 작성하고자 한다. 채팅기능을 만들기 위해서는 일반적으로 사용했던 HTTP 통신과는 다르게 Websocket이라는 socket통신 기술을 사용해야 한다. HTTP통신은 Client가 Server로 요청을 보냈을 때에만 Server가 응답하고 연결을 종료하는 일종의 단방향 통신이다. 때문에 Client가 Server에 연결을 요청하고, 필요한 데이터를 Server에 요청했을 때 해당 데이터를 다시 Client로 보내주는 일반적인 상황에서 많이 사용된다. 하지만 채팅 기능은 Client와 Server간의 연결이 끊어지지 않고 지속적으로..
부분집합? 부분집합이란 집합에 포함된 원소들을 선택하는 것이다. 부분집합의 수 집합의 원소가 n개일 때, 공집합을 포함한 부분집합의 수는 2ⁿ개다. 이는 각 원소를 부분집합에 포함시키거나 포함시키지 않은 2가지 경우를 모든 원소에 적용한 경우의 수와 같다. 예) {1,2,3,4} => 2*2*2*2 = 16가지 부분집합 구현 - 반복문 코드 결과 부분집합 구현 - 재귀 코드 결과 부분집합 응용 - 바이너리 카운팅 바이너리 카운팅을 통한 사전적 순서(Lexicographical Order)로 생성하는 방법 바이너리 카운팅(Binary Counting)은 사전적 순서로 생성하기 위한 가장 간단한 방법 원소 수에 해당하는 N개의 비트열을 이용하며, N번째 비트값이 1이면 n번째 원소가 포함되었음을 의미함 부분..
직관적으로 예시를 드는것이 이해하기 쉬워서 주사위 던지는 것을 예시로 든다. 중복 순열 - 주사위 3개를 던져 나올 수 있는 모든 경우의 수 - 123, 231은 다른 경우로 본다. 즉, 뽑는 순서가 상관이 있다. - 112처럼 같은 수를 중복으로 뽑을 수 있다. - n개 중 r개를 뽑는 모든 경우의 수를 nπr로 표현한다. 코드 결과 111, 112, 113, ~, 211, 212, ~ 666 순열 - 주사위 3개를 던져 모두 다른 수가 나올 수 있는 경우의 수 - 123, 231은 다른 경우로 본다. 즉, 뽑는 순서가 상관이 있다. - 112처럼 같은 수를 중복으로 뽑을 수 없다. - n개 중 r개를 중복되지 않게 뽑는 모든 경우의 수를 nPr로 표현한다. 코드 결과 123, 124, 125, ~, ..
조합? 조합이란 서로 다른 것들 중 몇 개를 순서 없이 골라낸 것이다. 서로 다른 n개 중 순서 없이 r개를 뽑는 조합은 nCr로 표현한다. 조합 구현 - 반복문 1, 2, 3, 4중 3개를 순서 없이 택할 수 있는 경우를 따진다. 즉, 4C3을 구해본다. 코드 결과 조합 구현 - 재귀 코드 결과 전체 코드 더보기 import java.util.Arrays; public class Main { static int N = 4; static int R = 3; static int[] input = {1, 2, 3, 4};// n개 원소 가진 배열 static void combination_for() { for(int i = 0; i < 4; i++) { for(int j = i+1; j < 4; j++) {..
순열? 순열이란 서로 다른 것들 중 몇 개를 뽑아서 한 줄로 나열하는 것을 말한다. 서로 다른 n개 중 r개를 택하는 순열은 nPr로 표현한다. nPr = n * (n-1) * (n-2) * ... * (n-r+1) (r개의 곱) nPn = n! 완전 검색 포스팅에서도 말했지만, 12!의 경우 거의 4억8천만번의 연산을 하기 때문에 n이 12를 넘어가면 연산 양이 엄청나게 많아진다. 순열 vs 조합 순열과 조합은 선택한 요소들의 순서가 의미가 있는지 여부로 구분된다. 순서의 의미가 다르다면 순열, 같다면 조합이다. 즉, 123과 321을 구분한다면 순열, 구분하지 않는다면 조합이다. 예를 들어, 이어달리기 사람 뽑는건 순서 의미가 있으므로 순열 농구 참가자 뽑는건 순서 의미가 없으므로 조합이다. 순열 구..
완전 검색? 완전 검색은 이름 그대로 모든 경우의 수를 체크하는 기법이다. Brute force 혹은 Generate and test 기법이라고도 한다. 여기서 force는 사람(지능)보다는 컴퓨터의 force를 의미한다. 모든 경우의 수를 테스트한 후, 최종 해법을 도출하기 때문에, 수행 속도는 느리지만, 해답을 찾지 못할 확률은 적다. 언제 사용하는가? 상대적으로 빠른 시간에 문제를 해결(알고리즘 설계)할 수 있기 때문에, 일반적으로 경우의 수가 상대적으로 작을 때 유용하다. 예를 들어 N개의 숫자로 N자리 수를 만들 수 있는 모든 경우의 수는 N!개인데, 10!의 경우 약 360만, 11!은 약 4000만, 12!은 약 4억8천만이다. Java를 사용할 때 대략적으로 1억번 연산에 1초 조금 안된다..
이번에는 하늘에서 총알이 떨어지는데, 랜덤한 위치에서 총알이 떨어지도록 만들 것이다. 만들어야 할 것은 총알 오브젝트 한 개, 총알 스크립트 한 개, 총알 풀 오브젝트 한 개, 게임매니저 오브젝트 한 개, 바닥 오브젝트 한 개이다. 총알 스크립트는 총알 오브젝트가 활성화 되었을 때의 세팅, 아래로 떨어지기, 플레이어와 바닥 충돌 감지를 할 것이고, 게임매니저 스크립트는 총알 오브젝트를 생성하고 스폰하는 역할을 하게 될 것이다. 필요한 오브젝트 생성 먼저 하이어라키에서 동그라미 스프라이트 1개와 빈 오브젝트 3개를 만들어 준다. 동그라미는 Bullet1이라는 이름을 주고, 빈 오브젝트는 GameManager, Floor, Bullet Pool이름을 준다. 다 만들면 하이어라키는 이렇게 된다. 스크립트에 B..
사담이지만, 기존에 여러 작업들을 하던 노트북이 맛이 갔다. 고쳐보려고 센터에 가져갔더니 보드가 나가서 고치는데 새거 주는 값이 나온단다. 온보드 cpu라 더 그런것 같다. 비슷한 가격대로 노트북을 새로 구입한 후 필요한 툴들을 다시 설치했는데, 이번에는 2022버전으로 다운로드 했다. 그런데 블로그에 올릴 프로젝트를 처음부터 다시 따라가면서 만들고 있는데 문제가 생겼다. Preference 설정을 해도 자동완성, 유니티 문법 관련 오류를 잡지 못하는 것이다. 유니티 허브같은 유니티 관련 경로를 통해 설치한 것이 아니라 따로 VS 홈페이지에서 설치했기 때문인 것 같다. 위를 보면 유니티 기초2번 글과 같이 using UnityEngine.SceneManagement;를 추가하지 않고 SceneManage..
시작 우리는 모바일 환경 게임으로 만들건데 키보드 입력으로 캐릭터가 움직인다. 때문에 이번에는 터치를 하면 캐릭터가 움직이도록 만들어 볼 것이다. 사전준비 사전준비로 오브젝트와 스크립트를 생성하고 기본 세팅을 할 것이다. 생성할 오브젝트는 3개, 스크립트는 1개이다. 먼저 하이어라키 창에서 우클릭->Create Empty를 한 후 이름은 UIManager라고 만든다. 다음 하이어라키 창에서 위처럼 Image를 만들면 UI오브젝트이기에 Canvas 안에 Image가 만들어진다. 캔버스 안에 이미지 오브젝트가 2개가 되도록 만든다. 다 만들고 이미지를 각각 Left_Move, Right_Move로 이름을 변경하면 위와 같이 된다. Canvas를 눌러서 Render Mode(동그라미 친 것)는 Screen S..