문제 설명
주어진 단어 목록과 검색할 단어가 있을 때, 이 검색할 단어가 단어 목록에 포함되어 있는지를 체크하는 문제입니다. 이 문제는
사전(dictionary) 자료구조를 활용하여 해결할 수 있습니다. 이는 C#에서 Dictionary
클래스를 사용하여 쉽게 구현할 수 있습니다.
알고리즘 문제
문제
주어진 단어 목록 words
가 주어질 때, 다음과 같은 checkWords
메소드를 작성하세요.
checkWords
메소드는 문자열 목록과 문자열을 인자로 받아, 해당 문자열이 목록에 있으면 true
를 리턴하고,
없으면 false
를 리턴해야 합니다.
예시
입력: words = ["apple", "banana", "cherry"], searchWord = "banana"
출력: true
문제 풀이
이 문제를 해결하기 위한 가장 효율적인 방법 중 하나는 해시 테이블을 사용하는 것입니다. 해시 테이블을 사용하여 단어 목록을
미리 저장하고, 검색할 때 O(1) 시간 복잡도로 단어를 찾아낼 수 있습니다. C#의 Dictionary
클래스를 활용하면
이러한 구현이 가능하므로, 아래의 단계로 문제를 해결하겠습니다.
단계 1: 단어 목록을 Dictionary로 변환하기
먼저, 주어진 단어 목록을 Dictionary
형태로 변환합니다. 각 단어를 키(key)로 사용하고, 값(value)은
불필요하게 빈 문자열을 사용하겠습니다.
// C# 코드
using System;
using System.Collections.Generic;
public class DictionarySearch
{
private Dictionary wordDictionary;
public DictionarySearch(List words)
{
wordDictionary = new Dictionary();
foreach (var word in words)
{
wordDictionary[word] = true; // Value는 필요 없으므로 true로 설정
}
}
}
단계 2: 단어 검색 메소드 작성하기
이제 checkWords
메소드를 작성하겠습니다. 이 메소드는 사전에서 검색할 단어가 존재하는지 여부를 확인할 것입니다.
public bool CheckWords(string searchWord)
{
return wordDictionary.ContainsKey(searchWord);
}
단계 3: 최종 클래스 및 메소드 구현
위의 단계들을 결합하여 최종적인 솔루션 형태로 클래스를 완성하겠습니다.
using System;
using System.Collections.Generic;
public class DictionarySearch
{
private Dictionary wordDictionary;
public DictionarySearch(List words)
{
wordDictionary = new Dictionary();
foreach (var word in words)
{
wordDictionary[word] = true;
}
}
public bool CheckWords(string searchWord)
{
return wordDictionary.ContainsKey(searchWord);
}
}
class Program
{
static void Main(string[] args)
{
List words = new List { "apple", "banana", "cherry" };
DictionarySearch dictionarySearch = new DictionarySearch(words);
Console.WriteLine(dictionarySearch.CheckWords("banana")); // Output: true
Console.WriteLine(dictionarySearch.CheckWords("grape")); // Output: false
}
}
복잡도 분석
– 시간 복잡도: O(1) – 해시 테이블을 사용하여 단어를 저장하고 검색하는 것이 최적으로 O(1) 시간에 수행됩니다.
– 공간 복잡도: O(n) – 주어진 단어 목록의 크기 n에 비례합니다.
중요 포인트
– 문제를 해결하기 위해 Dictionary
클래스를 사용하는 것이 핵심입니다. 이는 빠른 검색 속도를 보장합니다.
– 문자열 비교의 경우, 대소문자 구별 여부에 따라 결과가 달라질 수 있으므로 주의해야 합니다.
– 전체적인 코드를 수행해 본 후, 다양한 테스트 케이스를 통해 검증이 필요합니다.
결론
본 강좌에서는 C#을 활용하여 사전 찾기 문제를 해결하는 방법을 설명했습니다. 해시 테이블을 사용한 자료구조적 접근이
문제가 주어진 조건을 효율적으로 만족시킬 수 있음을 보였습니다. 실제 코딩 테스트에서도 이와 같은 자료구조의 사용이 빈번하게
나타나므로, 미리 연습하는 것이 중요합니다.