프로그래밍/공부
C# - Parse, TryParse, Convert의 차이점
Parse 문자열 표현을 해당하는 형식으로 변환한다 특정 형으로 변환할 수 없는 경우 FormatException 발생 null 변환시 ArgumentNullException 발생 string numStr = "0.555"; string nullStr = null; Int32.Parse(numStr);// FormatException Int32.Parse(nullStr); // ArgumentNullException TryParse 문자열 표현을 해당하는 형식으로 변환한다, 성공여부를 반환한다 string numStr = "0.555"; string nullStr = null; int num = 0; Int32.TryParse(numStr, out num); // false (0) Int32.TryPar..
최대공약수 알고리즘, 유클리드의 호제법 +최소공배수 구하기
1. 유클리드 호제법이란 두 자연수의 최대공약수를 구하는 알고리즘 중 하나 유클리드의 저서 《기하학원본》에 기재되어 있는 최대공약수를 구하는 방법 호제법 또는 연제법 이라고 한다 사용되는 성질 a를 b로 나눈 나머지 = c 이면 a, b의 최대공약수는 b, c의 최대공약수와 같다 알고리즘 두 자연수 또는 다항식 a,b의 최대공약수를 구하는 데 있어, 자연수일 때는 a > b, 다항식일 때는 a의 차수가 b의 차수 이상이라 하고, 다음과 같이 나눗셈을 실행한다 b를 c로 나눈 나머지 = c' 를 구하고 c'를 d로 나눈 나머지 = ... 위 과정을 반복하여 나머지가 0이 되었을 때의 '나누는 수'가 a와 b의 최대공약수이다. 2. 예시 78696과 19332의 최대공약수 구하기 78696=19332×4+1..
소수 구하기, 에라토스테네스의 체
1. 가장 기본적인 방법 자연수 x가 소수인지 판별하기 위해서 생각할 수 있는 가장 간단한 방법 x를 2 ~ n-1까지의 모든 수로 나누어 보고, 나누어 떨어지는 수가 존재하는지 확인하는 것 O(n)의 시간복잡도를 가지고 있다 bool IsPrime(int num) { for(int i = 2; i < num; ++i) { if(num % i == 0) { return false; } } return true; } 2. 제곱근을 이용하는 방법 x를 2 ~ √x까지의 모든 수로 나누어 보고, 나누어 떨어지는 수가 존재하는지 확인하는 것 O(√n)의 시간복잡도를 가지고 있다 bool IsPrime(int num) { int sqrtNum = (int)Math.Sqrt(num); for (int i = 2; i
유니티와 셰이더
셰이더 그동안 많은 일이 있어서 개발일지를 쓸 시간이 없었다 오랜만에 다시 글을 쓸 시간이 나서 적으면서 공부해보려 한다 현재 진행중인 프로젝트엔 URP를 적용중인데 셰이더 관련해서 직접 만들고 손봐야할게 있어서 차근차근 공부중이다 티스토리에선 마구잡이로 정리하기가 어려워서 Draw.io로 정리하면서 공부했다 URP, 렌더큐, 스텐실과 Z버퍼 등에 대해 잘 알게 되었고 원하던 기능도 구현하였다 여기에 다시 정리해놓고 싶지만 시간이 너무 늦어서 도움이 많이 된 다른 분의 사이트를 첨부해놓고 나중에 정리하려 한다 https://rito15.github.io/posts/unity-transparent-stencil/#ztest%EC%99%80-zwrite 유니티 반투명, 스텐실 개념 익히기 목차 rito15...
2D 메트로베니아 or 자연스러운 진행형 게임에서의 맵 생성
맵 저장 방식 1. 바이너리포맷으로 저장 및 불러오기 2. JSON으로 저장 및 불러오기 이 외에도 데이터 저장 및 불러오기는 xml이나 so 등등.. 으로도 하는 것 같지만 지금은 위 두개 중 2번, JSON으로 저장하고 불러오는 기능을 사용할 것 같다 왜냐하면 JSON의 이름이 더 마음에 들어ㅅ...가 아니고 XML 은 DTD 나 Schema 등을 이용해서 구문에 대한 정합성 등을 체크할 수 있는 장점이 있지만, 구문 자체가 길고 복잡해질 수 있습니다. 라는 댓글을 보았고 + 가독성이 떨어진다 개발중인 게임의 데이터가 많고 복잡한가? => 아님 이 이상 여기에 시간을 들일 여유가 있는가? => 아님 이었기 때문에 더 비교해보고 지체하는 것보단 바로 개발 ㄱㄱ가 맞다고 판단하였다 맵 생성 방식 1. 방..
왜 구조체는 16바이트가 넘지 않을 때 사용하는 것을 권장할까??
MSDN에선 다음과 같은 조건을 만족하지 않는 한 class를 사용하는 것을 권장한다 1. 논리적으로 기본 자료형과 유사한 단일 값을 표현할 때 2. 인스턴스의 크기가 16바이트 이하의 크기를 가졌을 때 3. 불변일 때 4. 박싱(Boxing)이 빈번하게 일어나지 않을 때 물론 그냥 보고 넘어갈 수도 있겠지만, 하지말라던지 권장한다던지 이러면 더 좋다던지 등의 글이 있을 때 '왜??' 라는 의문이 들기 마련이다 그래서 찾아보았더니 이런 글이 있었다. 이에 대한 비밀은, SSE(Streaming SIMD Extensions) 레지스터와 연관이 있습니다. x86 인텔 CPU의 경우 128비트 크기의 SSE 레지스터를 xmm0 ~ xmm7까지, 64비트인 경우 추가로 xmm8 ~ xmm15를 가지고 있는데, ..
어떻게 해야 커플링을 줄일 수 있을까??
객체가 자신의 책임을 다할 수 있으며 길고 복잡하지 않게 스크립트를 짜기 위해 기능별로 클래스를 나누다보니 A 스크립트에서 B 스크립트의 기능을 불러와야하는 경우가 많이 발생한다 결합도를 낮추기 위해 Start에서 UnityEvent로 함수를 등록해서 사용하는데 뭔가 마음에 안든다 객체의 책임을 이상한 곳에 맡긴걸까.. *DI패턴에 대해 공부해봐야겠다 + 각 클래스의 캡슐화가 잘 이루어지고 있는지 다시 살펴봐야겠다 (기능만 제작하는건 어렵지 않지만 유지보수하기 쉽고 확장성있는 스크립트를 제작하기 위해 고민해보다가 그냥 끄적여보는 글)