분류 전체보기 133

[Unity C#] 문자열 뒤집기

public class StringReverse_Source : MonoBehaviour { void Start() { string input = "Hello"; char[] arr = input.ToCharArray(); Reverse(arr); for(int i = 0; i < arr.Length; i++) { Debug.Log(arr[i]); } } void Reverse(char[] arr) //Switching { //char배열로 변경 char temp; for(int i = 0; i < (arr.Length/2); i++) // 앞쪽 절반만 돌아서 뒤쪽과 switcing { temp = arr[i]; arr[i] = arr[arr.Length -1 -i];//arr.Length-1가 맨 뒤이..

[Unity C#] 중복 문자열 체크 (아스키코드, 유니코드)

문제 중복된 문자열이 있는지 체크하라 소스코드 public class StringUnique_Source : MonoBehaviour { // Start is called before the first frame update void Start() { Debug.Log(isUnique_ASCII("Hello")); Debug.Log(isUnique_UNICODE("Hello")); } public bool isUnique_ASCII(string str) { if (str.Length > 128) return false; bool[] char_set = new bool[128]; for (int i = 0; i < str.Length; i++) { int val = str[i]; // 1. int형으로 캐..

[Unity C#] 아나그램(Anagram)

아나그램이란? 같은 문자로 이루어진 문자열이지만, 문자들의 정렬이 다른 경우 ( HelloWorld / WrlodHolle) 소스코드 public class Anagram_Source : MonoBehaviour { void Start() { string inputstr = "HelloWorld"; string inputstr2 = "WrlodHolle"; Debug.Log(AnagramChecker(inputstr, inputstr2)); } bool AnagramChecker(string input1, string input2) { //공백 제거 input1 = input1.Replace(" ", ""); input2 = input2.Replace(" ", ""); //1차적으로 길이로 판단 if(i..

[Unity C#] 랜덤퀴즈

문제 10번 동안 1~10까지 랜덤한 숫자를 출력하여 중복된 숫자가 있을 경우 true, false를 리턴하라 랜덤함수 범위만 지정해주면 되는 간단한 문제 소스코드 public class RandomQuiz_Source : MonoBehaviour { const int MAX = 10; void Start() { int[] data = new int[MAX]; int n = MAX; while (0 < n) { Debug.Log(RandomQuiz(data)); n--; } } bool RandomQuiz(int[] data) { RandomData_Init(data); for (int i = 0; i < data.Length; i++) { for(int j = 0; j < data.Length; j++..

[Unity C#] 피보나치 수열(재귀,메모이제이션)

개념 과정 참고 : marobiana.tistory.com/80 재귀 호출 과정이 생각보다 복잡해서 이미지 메이킹이 어려운데 해당 포스팅에서 쉽게 설명해주고 있다. 일반 재귀 vs 메모이제이션 재귀 피보나치 구현 시, 일반 재귀 코드는 문제가 있다. 이미 계산한 내용을 또 다시 계산을 하기 때문에 필요없는 연산이 생긴다. 예를들어, n = 5 일때, fibo(1) fibo(2) fibo(1) + fibo(2) fibo(2) + (fibo(1) + fibo(2)) (fibo(1) + fibo(2)) + (fibo(2) + (fibo(1) + fibo(2))) 위와 같이 전에 계산한 값을 매번 다시 계산을 한다. n이 매우 커질 경우 오버헤드가 너무 크다. 실제로 n = 30을 넣어보면, 결과가 안나오거나 ..

[Unity C#] 합병 정렬

개념 Merge sort는 분할정복법을 사용하여 정렬하는 알고리즘이다. 1) 분할: 해결하고자 하는 문제를 작은 크기의 동일한 문제들로 분할 2) 정복: 각각의 작은 문제를 순환적으로 해결 3) 합병: 작은 문제의 해를 합하여(merge) 원래 문제에 대한 해를 구함 출처: https://excelsior-cjh.tistory.com/47 [EXCELSIOR] 과정 장점 퀵 정렬과 비슷하게 원본 배열을 절반씩 분할해가면서 정렬하는 정렬법으로써 분할하는 과정에서 logNlogN 만큼의 시간이 소요된다. 즉, 최종적으로 보게되면 N×logNN×logN이 된다. 또한 퀵 정렬과 달리 기준값을 설정하는 과정없이 무조건 절반으로 분할하기에 기준값에 따라 성능이 달라지는 경우가 없다. 따라서 항상 O(N×logN)..