2010년 10월 29일 금요일

Euler Problem 4

Euler Problem 4 ask;
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.
Find the largest palindrome made from the product of two 3-digit numbers.

My solution;
Sub Palindrome()
    Dim Num, a, b, MaxPal
    Dim StrNum As String
    MaxPal = 0   '회문 최대값 저장 변수
    For a = 100 To 999
        For b = 100 To 999
            Num = a * b
            StrNum = CStr(Num)
            If StrComp(StrNum, StrReverse(StrNum), 1) = 0 Then
                If Num > MaxPal Then
                    MaxPal = Num
                End If
            End If
        Next
    Next
    MsgBox MaxPal
End Sub
실행시간(초):  0.703125

위 방식은 엑셀 VBA에 내장된 문자열 함수 CStr, StrComp, StrReverse 함수를 이용한 것이다.
세자리 숫자를 서로 곱한 결과를 문자열로 변환하고, 이를 역치환시켜 서로 비교하게 함으로써 회문(Palindrome)인지 확인했다.
실행시간은 약 0.7초 걸렸다. 만일 StrComp를 사용하지 않고, 직접 If StrNum = StrReverse(StrNum) Then 으로 하면 약 0.1초 정도 실행시간이 줄어든다.

다음 방식은 문자열 함수를 사용하지 않고, 직접 reverse 함수를 만들어 실행해 본 것이다. 실행속도는 오히려 약 2.5초 정도 더 늘어났다.

My solution 2;
Sub Palindrome2()
    Dim Num, a, b, MaxPal
    MaxPal = 0   '회문 최대값 저장 변수
    For a = 100 To 999
        For b = 100 To 999
            Num = a * b
            If Num = ReverseNum(Num) Then
                If Num > MaxPal Then
                    MaxPal = Num
                End If
            End If
        Next
    Next
    MsgBox MaxPal
End Sub

'숫자를 Reverse 시키는 함수
Function ReverseNum(ByVal n)
    Dim Reversed
    Reversed = 0
    Do While n > 0
        Reversed = (Reversed * 10) + (n Mod 10)
        n = Int(n / 10)  ' int를 안하면 정확한 결과가 나오지 않음(중요)
    Loop
    ReverseNum = Reversed
End Function
실행시간(초):  3.28125

댓글 없음:

댓글 쓰기

2.1 벡터(Vector)

  R의 자료구조 : 벡터, factor, 행렬, 배열, 데이터프레임, 리스트 벡터(Vector)는 동일한 형태(예, 숫자)의 데이터 구성인자가 1개 이상이면서 1차원으로 구성되어 있는 데이터 구조입니다. w <- c(1, 2, 3, 4, ...