소주제 1. 문자열을 끝날때까지 계속 받는다. - 문장을 계속 받되, null이면 그만 받음. 2. 문자열끼리 연결시킨다. - while문 내에서 처리 3. 콤마 기준으로 나누고 int형 변환 - String.Split(char seperator) 이용하여 쪼갤 수 있다. 쪼개진 문자열들은 배열형태로 저장된다. 4. 덧셈 - 배열을 int.Parse로 int형으로 바꾸고 다 더하면 끝 뭔가 더 깔끔하고 더 빠르게 가능할거같은데 일단 일이있어서 여까지 하구.. string sentence = null; string line; int answer = 0; char seperator = ','; while ((line = Console.ReadLine()) != null) { sentence += line; ..
주어지는 문자열을 하나하나 받아들여서 4가지 종류로 분류한다.ASCII 코드로 직접 대문자, 소문자 범위를 지정해주는 방법이 빠르고 좋은 듯 하다.나는 Regex를 사용해보았다. Regex때문인지 되게 느림...그리고 다음부터는 걍 C++로 해보려고..... static void Main(string[] args) { int small = 0; int large = 0; int num = 0; int space = 0; Regex smallRegex = new Regex(@"[a-z]"); Regex largeRegex = new Regex(@"[A-Z]"); Regex numRegex = new Regex(@"[0-9]"); string sentence; while((sentence = Console...
문제가 되게 쉬운데 왜 정답률이 22프로인가 고민했던 문제. 곧 그 이유를 절절히 깨닫고 마는데... Split()으로 쪼개고 Length처리하였으나 틀림. -> 문자열의 맨 앞이나 맨 뒤 띄어쓰기인 경우 이 역시 배열에 저장된다. Trim()으로 문자열 앞뒤의 공백 제거하였으나 틀림. -> 아무것도 입력하지 않은 경우를 고려하지 않았음 즉, 문자열[0]이 비었을경우 0을 출력하고 return하는 조건문이 필요했다. static void Main(string[] args) { string[] word = Console.ReadLine().Trim().Split(); List words = word.ToList(); if(words[0] == "") { Console.WriteLine("0"); retur..
처음엔 맹하게 두번째 숫자를 10, 100 ... 1000000으로 나눠서 0이 나오면 식의 if~ else if로 해결하려 했으나 컴파일 에러가 계속 났다.하지만 그렇게 멍청하게 코드 짤 문제도 아니고, 그냥 값을 문자열로 받아서 문자열 이어받기 하고 다시 정수형으로 변환해주면 된다.C#은 값을 기본적으로 string으로 받기 때문에 따로 필요한 변환이 더 있지는 않다. static void Main(string[] args) { string[] num = new string[4]; num = Console.ReadLine().Split(); num[0] = num[0] + num[1]; num[1] = num[2] + num[3]; long a = long.Parse(num[0]); long b = ..
1로 만들기보다는 떠올리기 쉬운 직관적 점화식으로 구성되었다. 다만 테스트 케이스 개수에 따라 반복되는 경우가 많은데, 그때마다 다시 그 값을 계산하는 것은 비효율적이다. 점화식과 간단한 주의점 static void Main(string[] args) { int[] answer = new int[12]; //index 0은 사용하지 않는다. answer[1] = 1; answer[2] = 2; answer[3] = 4; int n; string s = Console.ReadLine(); int caseNum = int.Parse(s); //테스트 케이스의 개수 int[] testCase = new int[caseNum]; for(int i = 0; i
반복문으로 차례차례 작은 값부터 원하는 값까지 구하되, 이전 값을 이용하여 최솟값을 계속 찾아 결과적으로 원하는 값의 최솟값을 구한다. 당연하지만 두번째 if문을 else if로 쓰면 안된다. static void Main(string[] args) { int[] a = new int[1000001]; //index 0은 사용하지 않는다. string s = Console.ReadLine(); int n = int.Parse(s); for(int k = 2; k
일반적 게임에서는 플레이어, 적, 상호작용이 가능한 오브젝트(파괴 가능), 상호작용이 가능한 오브젝트(파괴 불가능) 정도로 구분이 될 것이다.상호작용이 가능한 오브젝트 중 파괴 가능한 것은 드랍된 아이템 정도가 떠오르고, 파괴 불가능하면서 상호작용이 가능한 오브젝트로는 NPC나 문짝 등 여러가지가 떠오른다.이러한 작용을 효율적으로 적용시키기 위해서는 상속 기능을 잘 이용해야 한다. ex)Object와 ObjectController : Object의 작용 매커니즘은 Controller에, 이를 이용하는 중추는 Object로 구분지어 관리한다. 상속 : Player나 Enemy나 피해를 입어 체력이 모두 까이면 죽는 것은 같다. 이러한 기능을 따로 Script로 구현하고 상속하게 한다. 사람마다 코딩 스타일..
일반적으로 2D 게임에서는 포토샵 등으로 따로 만든 스프라이트들이 적용되기 마련이다. 그리고 오브젝트가 이동 시 이동하는 방향이 어디냐에 따라 적용되야 하는 애니메이션도 달라야 하며,서있는지, 걷는 중인지, 달리는 중인지를 분류하여 애니메이션을 또 나눠 적용해야 한다.sprites들을 animation 파일로 만든다. 연속된 이미지들을 하이라키에 끌어다 놓으면 간단하게 저장이 된다. or windows - animation(crtl + 6)에서 이미지 하나씩을 끌어다 놓고 세부조정을 할 수 있다. Animation 창에서 anim 파일 추가는 인터페이스 상단의 이름 + 상하화살표 모양을 눌러 새로 추가 가능.애니메이터에서 컨트롤러 조정을 한다. (*Blend Tree를 통해 상위그룹 묶을 수 있음)Par..
대부분의 게임은 2D던 3D던 간에 상관없이 상하좌우 입력을 받은 만큼 부드럽게 이동하지만, 정해진 픽셀단위만큼 이동해야 하는 게임도 있다. (ex) 턴 제 이동게임)그런 경우 멋없게 띡띡 이동할 수는 없는 노릇인데, Mathf.Lerp를 이용해 보간값을 가지고 움직임을 매끄럽게 만들어 줄 수 있다. IEnumerator smoothMove() { while(Input.GetAxisRaw("Horizontal") != 0 || Input.GetAxisRaw("Vertical") != 0) { animator.SetFloat("DirX", 0); animator.SetFloat("DirY", 0); vector = new Vector2(Input.GetAxisRaw("Horizontal"), Input.G..