C# 프로그래밍 기초 실습 전자책

C# / .NET 알고리즘과 퀴즈
본 알고리즘 퀴즈 문제는 C#/.NET 개발자를 위한 알고리즘 인터뷰 혹은 C# 프로그래밍을 통한
문제 해결 알고리즘을 연구해 보는데 도움이 되고자 작성되었습니다.


퀴즈 질문


예상답변/설명

입력 리스트가 이미 소트되어 있다는 것을 전제로 하고, 다음과 같이 병합 재정렬할 수 있다.

public List<int> MergeList(List<int> list1,
     List<int> list2)
{
    List<int> result = new List<int>();
    var enum1 = list1.GetEnumerator();
    var enum2 = list2.GetEnumerator();
    bool exists1 = enum1.MoveNext();
    bool exists2 = enum2.MoveNext();

    while (exists1 || exists2)
    {
        if (exists1 && exists2)
        {
            if (enum1.Current < enum2.Current)
            {
                result.Add(enum1.Current);
                exists1 = enum1.MoveNext();
            }
            else 
            {
                result.Add(enum2.Current);
                exists2 = enum2.MoveNext();
            }
        }
        else if (exists1)
        {
            for (; exists1; exists1 = enum1.MoveNext())
            {
                result.Add(enum1.Current);
            }                    
        }
        else
        {
            for (; exists2; exists2 = enum1.MoveNext())
            {
                result.Add(enum1.Current);
            }                    
        }
    }
    return result;
}