전체 글

Unity를 중점적으로 공부하는중입니다. 개인 깃허브 https://github.com/LKM0222 Nitros 소속
문제 어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 한다. 단, 두 번째 연산은 N이 K로 나누어떨어질 때만 선택할 수 있다. 1. N에서 1을 뺀다. 2.N을 K로 나눈다. 예를 들어 N이 17, K가 4라고 가정하자. 이때 1번의 과정을 한번 수행하면 N은 16이 된다. 이후에 2번의 과정을 두번 수행하면 N은 1이 된다. 결과적으로 이 경우 전체 과정을 실행한 횟수는 3이된다. 이는 N을 1로 만드는 최소 횟수이다. N과 K가 주어질 때 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 최소 횟수를 구하는 프로그램을 작성하시오. 입력조건 첫째줄에 N(2 m; // 한 줄씩 입력 받아 확인하기 for (int i = 0; i < n; i++) { ..
숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 같다. 1. 숫자가 쓰인 카드들이 N x M 형태로 놓여 있다. 이때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다. 2. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다. 3. 그다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다. 4. 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다. 예를 들어 3x3 형태로 카드들이 다음과 같이 놓여 있다고 가정하자. 3 1 2 4 1 4 2 ..
문제 '큰 수의 법칙'은 일반적으로 통계 분야에서 다루어지는 내용이지만 동빈이는 본인만의 방식으로 다르게 사용하고 있다. 동빈이의 큰 수 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스 (번호)에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어 순서대로 2, 4, 5, 4 ,6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자. 이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5인 46이 된다. 단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으..
문제 당신은 음식점의 계산을 도와주는 점원이다. 카운터에는 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리 동전이 무한히 존재한다고 가정한다. 손님에게 거슬러 줘야 할 돈이 N원일 때 거슬러 줘야 할 동전의 최소 개수를 구하라. 단, 거슬러 줘야 할 돈 N은 항상 10의 배수이다. 문제의 기본 개념은 '가장 큰 화폐 단위부터' 돈을 거슬러 주는 것이다. exchange.c #include int main(){ int coin[4] = {500,100,50,10}; int exchange; int count = 0; printf("put exchange: "); scanf("%d",&exchange); for(int i = 0;i < 4;i++){ for(;1;){ if(exchange < c..
· Study/TCP_IP
윈도우 기반으로 구현할 땐 헤더파일이 약간 다르다. 일단 프로젝트의 속성에서 링커 하위에 있는 추가 종속성에 ws2_32.lib을 추가해주자. (위치는 다를 수 있다) 윈도우에서의 소켓은 윈속이라고 부른다. 윈속의 초기화를 살펴보자 #include int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); ->성공 시 0, 실패 시 0이 아닌 에러코드 값 반환 wVersionRequested -> 프로그래머가 사용할 윈속의 버전정보 전달 lpWSAData -> WSADATA라는 구조체 변수의 주소 값 전달 wVersionRequested 변수는 Word 형으로 전달하여야 한다. 예를 들어 1.2버전의 윈속을 사용한다면 0x0201을 전달해야 한다. 소수점..
· Study/TCP_IP
이 글은 윤성우의 열혈 TCP_IP프로그래밍 책을 공부하면서 쓰는 글 입니다. 소켓 프로그래밍은 전화기에 비유 할 수 있다. 전화기는 송 수신이 한번에 이루어지는 양방향 통신구조이지만 소켓은 그렇지 않다. 일단 전화기에 해당하는 소켓을 생성하는 함수이다. #include int socket(int domain, int type, int protocol); -> 성공 시 파일 디스크립터, 실패 시 -1반환 전화를 구입하면 전화국 직원이 가설도 해주고 전화번호도 할당해 주지만, 소켓은 우리가 직접 가설을 해야한다. bind함수는 소켓에 주소정보를 할당하는 함수이다. #include int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen); -> 성공..
예를 들어 여러 씬이 있다 가정한다. A씬에서 버튼을 눌러서 B씬으로 이동한다고 생각해보자 그렇다면 B씬은 로딩이 되고 다시 A씬으로 돌아갔다가 다시 B씬으로 갈 때 B씬의 start함수는 실행이 될까? start함수는 씬이 호출되고 메모리에 등록이 될 때 한번만 실행된다. 따라서 start함수를 여러번 동작시키고 싶다면 차라리 Database 스크립트를 만들었다면 초기화가 필요한 변수들은 함수에 등록시키고 함수를 씬이 이동할때 혹은 버튼을 눌렀을때 호출시켜주면 된다.
게임을 구현하다 보면 플레이어를 카메라 안에 가둬야 할 때가 있다. 예를 들어서 이동하는 플레이어를 따라다니지 않는 카메라인 경우 카메라는 고정되어있으니 플레이어가 계속 움직인다면 언젠가는 플레이어가 카메라 밖으로 나갈 것이다. 따라서 월드좌표계를 뷰포트 좌표계로 변환하여 플레이어를 카메라 안으로 가둘 때 사용할 수 있는 코드를 첨부한다. Vector3 pos = Camera.main.WorldToViewportPoint(transform.position); if (pos.x 1f) pos.x = 1f; if (pos.y 1f) pos.y = 1f; transform.position = Camera..
코루틴을 공부하면서 얻은것 코루틴은 게임 실행 중 제어권을 넘겨받아서 처리하는 기법? 이라고 이해는 했다. 그래서 코루틴이 뭐냐 IEnumerator FadeOut() { Color fade = fadeImg.color; for (float ff = 0f; ff < 1f;) { ff += 0.01f; fade.a = ff; fadeImg.color = fade; yield return new WaitForSeconds(0.01f); } SceneManager.LoadScene("GameScene"); } StartCoroutine(FadeOut()); IEnumerator 라는 반환값을 적어주면 자동으로 코루틴 함수가 생성된다. 항상 코루틴의 반환값은 yield return 으로 리턴하고 null값 혹은..
유니티 게임 개발 중 나중에 다른 게임에서도 쓸만한 기능이나 몰랐던 기능 떠올랐던 알고리즘 등 정리하기 위해 만든 블로그입니다. 2022.01.01 하이퍼 캐쥬얼 게임 개발중