본문 바로가기
반응형

코딩테스트 준비211

백준 C# - 15652 +) 풀이 N과 M(4)번 문제이다. 앞서 N과 M(2)번 문제와 비슷한 문제이다. 하지만 2번과 달리 4번에서는 같은 숫자를 골라도 된다. N과 M(2)번 알고리즘 살펴보기 if (!visited[i]) { visited[i] = true; arr[depth] = i; Dfs(i, depth+1); visited[i] = false; } N과 M(4) 알고리즘 자릿수에 같은 숫자가 연속으로 오지 않게하기 위해 visited를 사용하였는데 여기에서 방문부분이 필요 없으므로 이와 관련된 부분을 삭제하면 된다. arr[depth] = i; Dfs(i,depth + 1); 코드 전문 using System; using System.Text; namespace baek2 { class Program { static int.. 2024. 1. 19.
백준 C# - 15651 +) 풀이 N과 M(3)번 문제이다. 만약 N과 M(1)과 N과 M(2)번을 풀고 왔으면 쉽게 풀 수 있다. 예제 출력을 보면 모든 조합이 다 출력되는 것을 확인할 수 있다. (아래 참조) 1 1 1 2 1 3 1 4 2 1 2 2 2 3 2 4 3 1 3 2 3 3 3 4 4 1 4 2 4 3 4 4 N과 M(1)번 알고리즘 살펴보기 앞서 N과 M(1)번에서는 자릿수에 같은 숫자가 연속으로 오지 않게하는 문제였는데 여기에서 이를 적용하기 위해 방문표시를 했는데 여기에서 방문부분을 없애게 되면 전체 조합을 구할 수 있게 된다. if(!visited[i]) { visited[i] = true; arr[depth] = i; DFS(depth + 1); visited[i] = false; } 전체 조합의 경우를 구하는 .. 2024. 1. 19.
백준 C# - 15650 +)풀이 이 문제를 풀기 앞서 아래 문제를 먼저 풀고 오는 것을 추천한다. 백준 C# - 15649 +) 풀이 대표적인 백트래킹 문제이다. 백트래킹 모든 경우의 수를 탐색하며 더 이상 해가 나올 것 같지 않으면 이전으로 돌아가서 다른 경우를 탐색한다. 풀이 원래 알던 DFS 알고리즘에서는 visited[i] = tru code-piggy.tistory.com N과 M(1)과의 차이점은 뒤에 숫자들이 앞의 숫자들보다 커야한단느 것이다. 출력 예시를 보면 더 쉽게 이해할 수 있다. 1 2 1 3 1 4 2 3 2 4 3 4 N과 M() 주요 알고리즘 N과 M(1)과의 차이점은 매개변수 at이 추가된 것이다. 이는 재귀가 어디서부터 시작하는지 나타내는 변수이다. public static void Dfs(int at, .. 2024. 1. 19.
백준 C# - 2839 using System; using System.Text; using System.Threading; namespace baek2 { class Program { public static void Main() { int a = int.Parse(Console.ReadLine()); int answer = 0; int b = a / 5; while(true) { if(b < 0) { Console.WriteLine(-1); return; } if((a - ( b * 5 ) )% 3 == 0) { answer = (a - (5 * b) ) / 3; break; } b--; } Console.Write(answer+b); } } } 2024. 1. 19.
백준 C# - 15649 +) 풀이 대표적인 백트래킹 문제이다. 백트래킹 모든 경우의 수를 탐색하며 더 이상 해가 나올 것 같지 않으면 이전으로 돌아가서 다른 경우를 탐색한다. 풀이 원래 알던 DFS 알고리즘에서는 visited[i] = true만 있었는데 백트래킹에서는 visited[i]=false가 추가된다. 처음에는 이부분이 이해하기가 몹시 어려웠다. if(depth == M) { for (int i = 0; i < M; i++) { sb.Append(arr[i]).Append(' '); } sb.AppendLine(); return; } for(int i = 1; i 2023. 12. 25.
C# - 메서드안에서 재귀호출시 실행과정을 알아보자 알고리즘 문제를 풀면서 재귀 호출 실행 과정을 한 번 자세히 다뤄보는게 좋을 것 같다는 생각이 들었다. 과정 01 메서드 안에 다시 메서드를 호출할 경우 재귀 호출이기 때문에 메서드가 호출되면서 현재 실행 중인 함수의 상태를 스택에 저장하고 새로운 함수 호출이 시작된다. 02 새로운 함수의 실행이 끝나면 return을 통해 스택에서 이전 함수의 상태를 꺼내어 계속 진행하게 된다. 예시 static void RecursiveExample(int i) { if (i == 3) { Console.WriteLine($"i == 3 : {i}"); return; // 이전 호출로 되돌아 가기 } Console.WriteLine($"Before recursive call: {i}"); RecursiveExample.. 2023. 12. 22.
반응형