Coding

    Unity : Virtual, Abstract, Interface

    가상(virtual)과 추상(abstract) 가상과 추상 사이에 핵심적인 차이점은 "완성도"다. 가상 클래스는 재정의(override)할 수 있지만 필수는 아니다. 반대로 추상 클래스는 '불완전하다는 의미'로서 파생 클래스에서 의무적으로 재정의해야 한다. 이 때, 불완전하다는 의미는 추상(abstract) 키워드를 달면 구체적은 기능을 제공할 수 없다는 뜻이다. 예시로 살펴보자. // ============================================== // 가상 클래스 예제 // ============================================== public class Animal { public virtual void Speak() { Console.WriteLine(..

    [Unity] Save, Load

    참고 [Unity Document] PlayerPrefs [Unity Q&A] How do I save a custom class of variables to playerprefs? Save, Load 유니티 게임에서 어떤 데이터를 저장하고 불러오는 여러 방법을 알아봤다. 1. PlayerPrefs (유니티 내장 함수) PlayerPrefs는 UnityEngine 클래스 안에 구현된 클래스로 게임 세션이 진행되는 와중에 데이터를 파일로 저장하거나 불러온다. 파일이 저장되는 디폴트 경로는 다음과 같다. macOS ~/Library/Preferences/unity.[company name].[product name].plist Window HKCU\Software[company name][product na..

    [Unity / Mirror] Authority

    Network Authority Authority(소유권)는 어떤 오브젝트를 누가 소유할 지 결정한다. Server Authority Server Authority는 서버가 오브젝트의 소유 권한을 가지고 있다는 의미다. 기본적으로 오브젝트의 소유 권한은 서버에게 있다. 예를 들어 수집할 수 있는 아이템, 움직이는 플랫폼, NPC 등이 있다. Client Authority Client Authority는 client가 오브젝트의 소유 권한을 가지고 있다는 뜻이다. 이 때, 소유 권한이라는 건 Client가 Commands를 호출할 수 있고 Client가 서버에서 나가면 그 물건들도 함께 사라진다는 걸 의미한다. Client Authority이더라도 Server는 여전히 오브젝트의 SyncVar 와 seri..

    [구현 / 2019 카카오 겨울 인턴십] 크레인 인형뽑기 게임

    문제 출처 programmers.co.kr/learn/courses/30/lessons/64061 접근 처음엔 가장 많이 터트릴 수 있는 경우를 찾는 문제인 줄 알았는데, 그냥 시뮬레이션 해보는 거라 당황했다. c++ 벡터를 통해 스택을 구현해서 시뮬레이션을 돌렸다. 풀이 뽑은 인형을 담아두는 게 실제로 스택과 구조가 같다. 또한 터트리는 경우를 알아내는 여러 방법이 있겠지만 가장 직관적인 방법은 넣을 때마다 가장 위와 그 바로 아래것만 체크하는 것이다. 코드 #include #include #include using namespace std; int solution(vector board, vector moves) { int answer = 0; int len = 0; int col;..

    Unity : Built-in Pipeline, Forward Rendering Path

    Unity : Built-in Pipeline 참고 유니티 문서 빌트인 렌더 파이프라인의 종류 Forword Rendering(포워드 렌더링) 빌트인 렌더 파이프라인의 기본 경로 가장 범용적임 픽셀 당 렌더링을 부분적으로 해서 렌더링 속도를 올림 단점 = 실시간 광원을 쓰면 부하가 높다. 조명 정확도가 낮다. Deferred Shading(디퍼드 셰이딩) 조명과 그림자 정확도가 높은 렌더링 경로 단, GPU 지원이 필요하고 제한 사항이 많다. 반투명, 직교 투사, 하드웨어 안티앨리어싱 미지원 컬링 마스크 지원이 제한적 Renderer.receiveShadows가 항상 true legacy deferred(레거시 디퍼드), legacy vertex lit(레거시 버텍스 릿) 요약 포워드 렌더링은 적당히 무..

    [Greedy / Gold 5] 2812번: 크게 만들기

    문제 출처 www.acmicpc.net/problem/2812 문제 내용 문제 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ K < N ≤ 500,000) 둘째 줄에 N자리 숫자가 주어진다. 이 수는 0으로 시작하지 않는다. 출력 입력으로 주어진 숫자에서 K개를 지웠을 때 얻을 수 있는 가장 큰 수를 출력한다. 풀이 K와 N의 크기가 예사롭지 않은 걸 보면 시간복잡도가 O(N+K) 정도 이하여야 한다는 걸 알 수 있다. 그리디 알고리즘을 이용한다는 전제하에 어떤 조건으로 풀어낼 수 있을지 고민했다. 숫자를 하나씩 지워나갈 때마다 항상 가장 큰 수를 만들어나가면 K개를 지워도 가장 큰 수를 알..

    [Greedy / Gold5] 1038번: 감소하는 수

    문제 출처 www.acmicpc.net/problem/1038 문제 내용 문제 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 출력하는 프로그램을 작성하시오. 0은 0번째 감소하는 수이고, 1은 1번째 감소하는 수이다. 만약 N번째 감소하는 수가 없다면 -1을 출력한다. 입력 첫째 줄에 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄에 N번째 감소하는 수를 출력한다. 풀이 정수 X가 a 자리 수라고 했을 때, X가 감소하는 수가 되려면 a-1부터 1의 자리수까지 a보다 작은 감소하는 수로 이뤄져있어야 한다..

    [Greedy] 문자열 합치기

    문제 출처 https://algospot.com/judge/problem/read/STRJOIN 문제 내용 문제 프로그래밍 언어 C 의 큰 문제점 중 하나는 언어 차원에서 문자열 변수형을 지원하지 않는다는 것입니다. C 에서는 문자 배열로 문자열을 표현하되 \0 (NULL) 로 문자열의 끝을 지정하는데, 이래서는 문자열의 길이를 쉽게 알 수 있는 방법이 없기 때문에 여러 가지 문제가 발생하게 됩니다. void strcat(char* dest, const char* src) { // dest 의 마지막 위치를 찾는다 while(*dest) ++dest; // src 를 한 글자씩 dest 에 옮겨 붙인다 while(*src) *(dest++) = *(src++); // 문자열의 끝을 알리는 \0 을 추가한..