본문 바로가기

c#109

C# 재귀 호출 동작 방식 재귀 호출에 대해 재귀(recursion) 함수란 자신을 호출하는 함수를 말하는데, while이나 for와 같은 순환처럼 재귀 함수도 하나씩 작은 부분을 처리한 결과를 결합해 하나의 복잡한 문제를 해결해 나가는 방법이다. 하지만 for나 while은 작업이 끝날 때까지 반복을 계속하는 반면, 재귀호출은 작업 자체를 잘게 쪼개서 처리한 결과를 결합하는 방법으로 더 큰 문제를 해결한다는 차이가 있다. 반복에 비해 재귀가 더 짧게 구현 가능한 경우가 많기 때문에 함수형 접근 방식에 적합하지만, 설계와 테스트는 더 어려운 편이다. 재귀 호출로 코드를 더 짧게 구현 가능 설계와 테스트 난이도가 올라감 using System; public partial class Program { static void Main(s.. 2024. 3. 29.
C# LINQ - Enumerable.TakeWhile Enumerable.TakeWhile(IEnumerable, Func) 메서드 public static System.Collections.Generic.IEnumerable TakeWhile (this System.Collections.Generic.IEnumerable source, Func predicate); 매개변수 source IEnumerable 요소가 반환되는 시퀀스 predicate Func 각 소스 요소를 조건에 대해 테스트할 함수 반환 IEnumerable 테스트를 통과한 요소들의 시퀀스를 반환한다. 예제 코드 string[] fruits = { "apple", "banana", "mango", "orange", "passionfruit", "grape" }; IEnumerable qu.. 2024. 3. 28.
C# string에서 16진수로 변환하기 string에서 16진수로 변환하기 string에서 16진수로 변환하기 위해서는 우선 각각의 string을 한글자씩 char 요소로 분해해서 이를 바이트로 출력하면 된다. 이때 바이트로 변환되는 값은 10진수이다. public static byte[] ConvertToByte(string str) { byte[] bytes = new byte[str.Length]; int i = 0; foreach (char c in str) { bytes[i++] = Convert.ToByte(c); } return bytes; } 전체 예제 코드 using System; public partial class Program { static void Main(string[] args) { int i = 0; string.. 2024. 3. 28.
식 트리와 람다식 식 트리(expression tree) 람다를 이용하면 식의 요소들을 트리로 표현하는 데이터 구조인 식 트리(expression tree)를 만드는 것도 가능하다. 식 트리를 이용하면, 트리를 따라가며 해석하거나 특정 노드를 수정해서 코드에 변화를 줄 수 있다. 컴파일러 측면에서는 식 트리를 추상 구문 트리(abstract syntax tree, AST)라고 부른다. 대리자에 람다식을 할당하는 코드를 살펴보자. private static Func AreaREctangleDelegate = (a, b) => a * b; 이 문은 다음 세 구역으로 나눈다. 대리자 변수 선언 : Func AreaRectangleDelegate 대입(할당) 연산자 : = 람다식 : (a, b) => a* b 이제 이 문을 데이.. 2024. 3. 27.
C# list 랜덤(random) 하게 섞기 C#에서 Linq로 랜덤 하게 섞기 list의 요소들을 랜덤 하게 섞고 싶을 때 Linq OrderBy()에서 random 객체의 Next()를 호출하면 간단하게 해당 요소들을 섞을 수 있다. using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { var list = new List() { 1, 2, 3, 4, 5 }; var random = new Random(); var randomized = list.OrderBy(x => random.Next()); foreach (var i in randomized) { Console.WriteLine(i); .. 2024. 3. 21.
일반 더하기 곱셈 vs 고대 이집트 곱셈법 곱셈을 덧셈으로 만약 곱셈을 할 줄 모르는 상태에서 a * 8을 구해야 한다고 해보자. 곱셈을 모르기 때문에 a + a + a + a + a + a + a + a 이렇게 계산하면 원하는 결과를 얻을 수 있다. 다만 이렇게 하면 덧셈을 7번이나 해야 한다. 그런데, a + a를 일단 계산하면 2a를 알 수 있으므로 결국 2a + 2a + 2a + 2a를 계산하면 된다. 이를 확장해 보면 8a = a + a + a + a + a + a + a + a = 2a + 2a + 2a + 2a = 4a + 4a = 8a 이 방법을 8a를 계산하면 다음과 같이 3회의 덧셈으로 계산이 끝난다. a + a 2a + 2a 4a + 4a 곱하는 수 8이 2의 거듭제곱의 형태이므로 23 = log28 = 3회의 덧셈으로 끝난 .. 2024. 3. 18.