본문 바로가기

Coding Test

(17)
코딩 테스트 대비: 회문 연결 리스트 문제 풀이 (C#) 안녕하세요, GameLabMaster입니다! 이번에는 코딩 테스트에서 자주 등장하는 링크드 리스트 문제 중 하나인 '회문 연결 리스트(Palindrome Linked List)'를 다뤄보겠습니다. 문제 주어진 연결 리스트가 회문(palindrome)인지 확인하는 함수를 작성해야 합니다. 예시: Input: 1->2 Output: false Input: 1->2->2->1 Output: true 풀이 이 문제를 해결하기 위한 한 가지의 접근 방법은 두 포인터를 이용하는 것입니다: 빠른 포인터와 느린 포인터를 두어, 빠른 포인터가 연결 리스트의 끝에 도달할 때까지 느린 포인터를 중간 지점까지 이동시킵니다. 그런 다음, 느린 포인터 위치부터 연결 리스트를 뒤집고, 처음부터 중간 지점까지의 연결 리스트와 뒤집은..
코딩 테스트 대비: 동적 프로그래밍 기초 (C#) 안녕하세요, GameLabMaster입니다! 오늘의 포스팅에서는 동적 프로그래밍에 대해 이해하고, 이를 활용한 문제 해결 방법을 살펴보겠습니다. 동적 프로그래밍은 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법입니다. 이 방법은 큰 문제를 해결하기 위해 작은 문제를 여러 번 해결하는 상황에서 효율적입니다. 문제 0부터 N까지의 숫자에서 i번째 피보나치 수를 구하는 프로그램을 작성하세요. 입력 숫자 N (0 ≤ N ≤ 100) 출력 N번째 피보나치 수 풀이 동적 프로그래밍을 이용하여 피보나치 수열을 구하는 문제를 해결할 수 있습니다. 피보나치 수열의 i번째 항은 (i-1)번째 항과 (i-2)번째 항의 합이므로, 이전에 계산한 결과를 활용하여 현재의 문제를 해결할 수 있습니다. 다음은 C#으로 작성..
코딩 테스트 대비: 이진 트리 순회 알고리즘 (C#) 안녕하세요, GameLabMaster입니다! 오늘의 포스팅에서는 이진 트리의 순회 알고리즘에 대해 알아보고 C#으로 구현하는 방법을 살펴보겠습니다. 트리 순회 알고리즘은 트리의 모든 노드를 방문하는 방법으로, 주로 전위(preorder), 중위(inorder), 후위(postorder) 순회 방법이 사용됩니다. 문제 주어진 이진 트리의 전위, 중위, 후위 순회 결과를 출력하는 프로그램을 작성하세요. 입력 이진 트리를 구성하는 노드들 출력 전위 순회 결과 중위 순회 결과 후위 순회 결과 풀이 이진 트리의 순회는 재귀 함수를 활용해 구현할 수 있습니다. 각 순회 방법은 노드 방문의 순서만 다르며, 방문 순서에 따라 전위, 중위, 후위 순회가 결정됩니다. 다음은 C#으로 작성한 이진 트리 순회 알고리즘의 예시..
코딩 테스트 대비: KMP 알고리즘을 활용한 문자열 검색 (C#) 안녕하세요, GameLabMaster입니다! 이번 코딩 테스트 대비 포스팅에서는 문자열 알고리즘 중 KMP(Knuth-Morris-Pratt) 알고리즘을 활용한 문제 풀이에 대해 알아보겠습니다. KMP 알고리즘은 문자열 검색에서 효율적인 방법으로, 브루트 포스 방식보다 빠른 속도로 문자열 검색을 수행할 수 있습니다. 문제 주어진 문자열 S와 패턴 문자열 P가 있을 때, S 안에 P가 존재하는지 확인하고, 존재한다면 몇 번째 인덱스에서 시작하는지 찾는 프로그램을 작성하세요. 입력 문자열 S (1 ≤ |S| ≤ 100,000) 문자열 P (1 ≤ |P| ≤ 10,000) 문자열은 알파벳 소문자로만 이루어져 있다. 출력 문자열 S 안에 패턴 문자열 P가 존재한다면 시작하는 인덱스를 출력하고, 존재하지 않는다면..
코딩 테스트 대비: 플로이드-와샬 알고리즘 - 모든 정점 쌍의 최단 경로 찾기 (C#) 안녕하세요, GameLabMaster입니다! 이번 코딩 테스트 대비 포스팅에서는 그래프 알고리즘 중 플로이드-와샬(Floyd-Warshall) 알고리즘을 활용한 문제 풀이에 대해 알아보겠습니다. 플로이드-와샬 알고리즘은 모든 정점 쌍의 최단 경로를 찾는 알고리즘으로, 다익스트라 알고리즘과 함께 널리 사용됩니다. 문제 주어진 가중치 그래프에서 모든 정점 쌍의 최단 경로를 구하는 프로그램을 작성하세요. 입력정점의 개수 N (1 ≤ N ≤ 100)간선의 개수 M (0 ≤ M ≤ N*(N-1)/2)M개의 간선 정보. 각 간선은 세 개의 정수로 주어지며, 이는 시작 정점 u, 도착 정점 v, 가중치 w (1 ≤ u, v ≤ N, u ≠ v, 1 ≤ w ≤ 100)를 의미한다.출력N개의 줄, 각 줄에 N개의 정수로..
코딩 테스트 대비: 슬라이딩 윈도우 기법 - 연속된 구간의 최대 합 구하기 (C#) 안녕하세요, GameLabMaster입니다! 이번 코딩 테스트 대비 포스팅에서는 슬라이딩 윈도우(Sliding Window) 기법을 활용한 문제 풀이에 대해 알아보겠습니다. 문제 길이가 N인 배열 A가 주어집니다. 이 배열에서 연속된 K개의 원소의 합이 최대가 되는 구간의 합을 찾는 프로그램을 작성하세요. 입력 배열의 길이 N (1 ≤ N ≤ 10^5) 연속된 원소의 개수 K (1 ≤ K ≤ N) N개의 정수 A1, A2, ... , AN (|Ai| ≤ 10^4) 출력 연속된 K개의 원소의 합이 최대가 되는 구간의 합 풀이 이 문제는 슬라이딩 윈도우 기법을 사용하여 해결할 수 있습니다. 슬라이딩 윈도우 기법은 고정된 길이의 구간(윈도우)을 배열에 슬라이딩 시키며 각 구간에 대한 정보를 구하는 방법입니다...
코딩 테스트 대비: 동적 프로그래밍 - 0-1 Knapsack Problem 풀이 안녕하세요, GameLabMaster입니다! 이번 코딩 테스트 대비 포스팅에서는 동적 프로그래밍(Dynamic Programming) 기법을 활용한 '0-1 Knapsack Problem'에 대해 알아보겠습니다. 문제 당신은 배낭 한 개와 N개의 아이템들을 가지고 있습니다. 각 아이템은 무게와 가치를 가지고 있습니다. 배낭의 최대 무게는 W이며, 배낭에 담을 수 있는 아이템들의 최대 가치를 구하는 프로그램을 작성하세요. 이때, 아이템은 0개 또는 1개만 담을 수 있습니다. (0-1 Knapsack Problem) 입력 아이템의 개수 N (1 ≤ N ≤ 100) 배낭의 최대 무게 W (1 ≤ W ≤ 100,000) N개의 아이템 정보, 각 줄에는 아이템의 무게 Wi와 가치 Vi가 주어집니다. (1 ≤ Wi..
코딩 테스트 대비: '네트워크 연결' 문제 풀이 - Kruskal 알고리즘 적용 (C#) 안녕하세요, GameLabMaster입니다! 이번 코딩 테스트 대비 포스팅에서는 '네트워크 연결' 문제와 해당 문제를 해결하는 Kruskal 알고리즘에 대해 알아보겠습니다. 문제 여러 개의 노드와 각 노드를 연결하는 간선들이 주어집니다. 각 간선은 가중치를 가지며, 이 가중치는 노드 간의 연결 비용을 의미합니다. 모든 노드를 연결하는 최소 비용을 구하는 프로그램을 작성하세요. 입력 노드의 개수 N (1 ≤ N ≤ 1000) 간선의 개수 M (1 ≤ M ≤ 100,000) M개의 간선 정보, 각 줄에는 노드 A, 노드 B, 가중치 C가 주어집니다. (1 ≤ A, B ≤ N, 1 ≤ C ≤ 100,000) 출력 모든 노드를 연결하는 최소 비용 풀이 이 문제는 Kruskal 알고리즘을 사용하여 해결할 수 있습..