안녕하세요! 본 글에서는 C#을 활용한 코딩 테스트 문제를 함께 해결해보며, 디버깅의 중요성과 활용 방법에 대해 살펴보겠습니다. 실제 문제를 풀며 디버깅 기술이 어떻게 도움이 되는지 구체적인 사례를 통해 확인해보겠습니다.
문제 설명
문제: 가장 긴 펠린드롬 부분 문자열
주어진 문자열에서 가장 긴 펠린드롬 부분 문자열을 찾아 반환하는 함수를 만드세요. 문자열의 길이는 최대 1000입니다.
예시 입력:
"babad"
예시 출력:
"bab" 또는 "aba"
문제 해결 과정
이제, 이 문제를 해결하기 위한 접근 방식을 단계별로 살펴보겠습니다.
1단계: 문제 이해하기
문제의 핵심은 입력된 문자열에서 펠린드롬을 검사하는 것입니다. 펠린드롬은 앞뒤가 같은 문자열을 의미합니다. 예를 들어, “racecar”가 그 예시입니다. 우리는 주어진 문자열에서 가능한 모든 부분 문자열을 생성하고, 각 문자열이 펠린드롬인지 확인해야 합니다.
2단계: 알고리즘 설계
가장 긴 펠린드롬 부분 문자열을 찾기 위해서 다음과 같은 알고리즘을 설계했습니다:
- 주어진 문자열의 모든 부분 문자열을 생성합니다.
- 각 부분 문자열이 펠린드롬인지 확인합니다.
- 펠린드롬 일 경우 해당 문자열의 길이를 비교하여 가장 긴 것을 저장합니다.
3단계: C# 코드 구현
이제 각 단계에 맞게 C# 코드를 구현해보겠습니다.
using System;
public class LongestPalindromicSubstring
{
public string GetLongestPalindrome(string s)
{
if (string.IsNullOrEmpty(s)) return "";
string longestPalindrome = "";
for (int i = 0; i < s.Length; i++)
{
// 홀수 길이의 펠린드롬 검사
string oddPalindrome = ExpandFromCenter(s, i, i);
if (oddPalindrome.Length > longestPalindrome.Length)
{
longestPalindrome = oddPalindrome;
}
// 짝수 길이의 펠린드롬 검사
string evenPalindrome = ExpandFromCenter(s, i, i + 1);
if (evenPalindrome.Length > longestPalindrome.Length)
{
longestPalindrome = evenPalindrome;
}
}
return longestPalindrome;
}
private string ExpandFromCenter(string s, int left, int right)
{
while (left >= 0 && right < s.Length && s[left] == s[right])
{
left--;
right++;
}
return s.Substring(left + 1, right - left - 1);
}
}
4단계: 디버깅 및 테스트
이제 구현한 코드를 테스트하고, 오류가 있는지 디버깅할 차례입니다.
- 코드를 실행 후, 다양한 케이스를 입력하여 결과가 예상과 일치하는지 확인합니다.
- 특히, 공백 문자, 숫자, 특수문자 등이 포함된 복잡한 문자열을 테스트하여 펠린드롬 검사가 잘 이루어지는지 확인합니다.
예제 테스트 케이스
LongestPalindromicSubstring lps = new LongestPalindromicSubstring();
Console.WriteLine(lps.GetLongestPalindrome("babad")); // bab 또는 aba
Console.WriteLine(lps.GetLongestPalindrome("cbbd")); // bb
Console.WriteLine(lps.GetLongestPalindrome("a")); // a
Console.WriteLine(lps.GetLongestPalindrome("ac")); // a
Console.WriteLine(lps.GetLongestPalindrome("racecar")); // racecar
디버깅 팁
디버깅할 때 다음과 같은 점을 유념하세요:
- 변수 값을 주의 깊게 확인하며 필요시 중단점을 두고 코드를 실행해보세요.
- 각 단계별로 예상하는 값과 실제 값을 비교하여 어디에서 오류가 발생하는지 파악하세요.
- 코드를 작은 조각으로 나누어 각각의 기능이 잘 작동하는지 독립적으로 테스트하세요.
마무리
이번 글에서는 C#을 활용한 펠린드롬 문제를 통해 알고리즘 설계 및 디버깅 과정에 대해 살펴보았습니다. 디버깅은 문제를 해결하는 데 있어 매우 중요한 단계이며, 프로그램이 예상대로 작동하게 만들기 위해 반복적으로 수행해야 하는 과정입니다. 각 단계를 천천히 검토하고, 필요한 도움을 찾는 것을 주저하지 마세요.
이제 여러분도 이 문제를 활용하여 C# 코딩 테스트에 대비할 수 있습니다. 지속적으로 연습하고, 다양한 문제를 풀어나가세요!
추가 학습 자료
마지막으로, 다음과 같은 자료를 참고하여 더 깊이 있는 학습을 할 수 있습니다: