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

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


퀴즈 질문


예상답변/설명

정수의 비트들이 회문을 이루는지 체크하기 위해서는 정수N의 비트들을 거꾸로 변환하여 임시 변수에 넣어둔 후, 이 임시변수와 입력 정수가 같은지를 체크하면 된다. 만약 정수가 양의 정수라면 다음과 같이 구현할 수 있다.

bool IsPalindrome(int n)
{
    int rev = 0;
    int t = n;

    while (t != 0)
    {
        rev <<= 1;
        rev |= t & 1;
        t >>= 1;
    }

    return (rev == n);
}

만약 정수가 음수인 경우 위와 같이 오른쪽으로 Shift를 하게 되면 무한루프에 빠지게 되므로, 이런 경우는 반대로 체크값 1을 계속 왼쪽으로 Shift하는 방법을 고려해 볼 수 있다.