반응형 분류 전체보기552 백준 C# - 11724 +) 풀이 연결 요소(Connected Component)수 구하기 그래프에서 각 노드가 서로 연결된 갯수를 구하면 된다. 이는 한 노드를 잡고 DFS를 통해 그 노드에 연결된 모든 노드들을 방문한다. 이를 count를 증가시키면서 방문이 되지 않는 노드가 없을때까지 반복하면된다. 01 DFS public static void dfs(int now) { visited[now] = true; foreach (int next in graph[now]) { if (visited[next]) continue; dfs(next); } } 02 그래프 입력받기 int[] input = Array.ConvertAll(Console.ReadLine().Split(), int.Parse); int n = input[0]; int .. 2023. 12. 10. Effective C# - Item 21 타입 매개 변수가 IDisposable을 구현한 경우를 대비하여 제네릭 클래스를 작성하라 제약 조건은 두 가지 역할을 한다. 1. 런타임 오류가 발생할 가능성이 있는 부분을 컴파일 타임 오류로 대체 2. 타입 매개변수로 사용할 수 있는 타입을 명확히 규정하여 사용자에게 도움 제약 조건은 해당 타입이 특정 인터페이스를 구현하는 등의 특성을 지정할 수 있지만 해당 타입이 특정 작업을 수행하도록 강제하지는 않는다. 예를 들어 IDisposable을 구현하는 타입이라면 특별한 추가 작업이 필요하다고 설명했지만 제약 조건 자체는 해당 타입이 IDisposable을 구현하는지 여부만 확인할 뿐 실제로 IDisposable에서 요구하는 작업을 강제하지는 않는디. 제네릭 메서드 내에서 타입 매개 변수로 주어지는 타입을 이용하여 인스턴스를 생성하는 경우 발생 T가 IDisposable을 구현한 타입을 경우 .. 2023. 12. 10. Effective C# - Item20 IComparable<T>와 IComparer<T>를 이용하여 객체의 선후 관계를 정의하라 객체의 값 비교(정렬 등)정의하는 인터페이스 두 가지 IComparable과 IComparer 1. IComparable 타입의 기본적인 선후 관계 정의 CompareTo(Object) public int CompareTo (object? obj); 매개변수 obj : 비교할 대상 객체 반환 음수 : 현재 객체가 대상 객체보다 작은 경우 0 : 현재 객체가 대상 객체와 같은 경우 양수 : 현재 객체가 대상 객체보다 큰 경우 01 (제네릭 버전) IComparable public class Piggy : IComparable { public string Name { get; set; } public int Age { get; set; } public int CompareTo(Piggy other) { re.. 2023. 12. 10. Effective C# - Item19 런타임에 타입을 확인하여 최적의 알고리즘을 사용하라 만약 어떤 알고리즘이 특정 타입에 대해 더 효율적으로 동작한다고 생각된다면 그냥 그 타입을 이용하도록 코드를 작성하자. 이를 위해 제약 조건을 설정하는 것은 항상 효과적인 방법은 아니다. 제네릭의 인스턴스화는 런타임의 타입을 고려하지 않으며 컴파일타임의 타입만을 고려한다. 효율적인 코드를 작성하려면 이러한 사실을 반드시 알고있어야 한다. 컴파일 타임(Compile Time) 컴파일러에 의해 소스코드에서 목적코드(기계어 또는 중간코드)로 변환되는 동안을 가리킨다. 컴파일 타임에는 코드의 구문분석, 타입검사, 최적화등이 이루어진다. 제네릭의 인스턴스화는 주로 컴파일 타임에 이루어진다. 코드가 실행되기 전에 컴파일러는 제네릭 코드를 실제 타입으로 변환하고 최적환한다. public class MyPiggy { .. 2023. 12. 10. 백준C# - 1260 +) 풀이 DFS와 BFS를 구현하는 문제이다. 1. 초기 설정 01 graph와 visited 변수 설정 graph는 그래프를 표현하기 위한 인접리스트이고 vistied는 정점의 방문 여부를 나타내는 배열이다. static List[] graph; static bool[] visited; 02 입력 받기 int[] input = Array.ConvertAll(Console.ReadLine().Split(), int.Parse); int N = input[0]; // 정점 int M = input[1]; // 간선 int V = input[2]; // 탐색을 시작할 정점의 번호 03 그래프 초기화 graph = new List[N + 1]; for (int i = 1; i 0) { int now = queue.De.. 2023. 12. 9. C# - 완전 탐색(Brute force, 백트래킹,순열 조합,비트 마스크) 완점 탐색 모든 가능한 경우의 수를 탐색하여 최적의 결과를 찾는 방법이다. 01 브루트 포스(Brute force) 모든 가능한 결우를 순차적으로 나열하면서 원하는 결과를 찾는 방법이다. 예시 : 비밀번호 02 순열(Permutation) 선택 순서가 결과에 영향을 미치는 경우에 사용하는 방법이다. 03 조합(Combination) 선택 순서가 결과에 영향을 주지 않는 경우에 사용하는 방법이다. 04 백트래킹(BackTracking) 현재 상태에서 가능한 후부군으로 가지를 치며 탐색하는 알고리즘이다. 해가 될 것 같지 않은 경로는 더 이상 탐색하지 않고 되돌아간다. 예시 : 스도쿠 05 비트 마스크(Bit Mask) 이진수의 각 비트를 사용하여 경우의 수를 줄여가며 탐색하는 방법이다. 예시 : 부분 집합.. 2023. 12. 8. 이전 1 ··· 27 28 29 30 31 32 33 ··· 92 다음 반응형