Daily Algorithm - Day 3

105·2024년 12월 23일
0

Daily Algorithm

목록 보기
4/30

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

3자리 숫자 2개의 곱으로 만들 수 있는 가장 큰 palindrome을 구하는 문제이다.

내가 세운 계획은 다음과 같다.

  • palindrome 인지 확인하는 함수를 작성한다.
  • 3자리 정수 a, b의 곱을 전부 구해서 palindrome이라면 list에 추가한다.
  • list를 정렬 후 pop()을 이용해 가장 큰 수를 출력한다.

먼저 palindrome인지 확인해주는 함수다.

//Python

def isPalindrome (n) :
    reverse_num = 0
    num = n
    while num > 0:             
        remainder = num % 10    # 1의 자리를 구한 후 
        reverse_num = reverse_num * 10 + remainder  # reverse_num에 더한 후 10을 곱하는 것을 반복 
        num = num // 10   # 10으로 나눈 후의 1의 자리 수 = 다음 자릿 수 구하기
    if reverse_num == n:
        return True
    return False

n이 palindrome 일 경우 True를 출력 하고 아니라면 False를 출력해준다.

그리고 a, b 의 곱을 전부 구해서 그 값이 palindrome일 경우 list에 추가해주는 코드를 작성했다.

a = 100
palindromes = []

while a < 1000 :
    b = 100  # a가 1 커질때 마다 100 부터 다시 시작해야 함
    while b < 1000:
        if isPalindrome(a*b) :
            palindromes.append(a*b)
        b += 1
    a += 1

이제 완성된 list를 정렬한 후 pop()을 실행해주면 답을 알아낼 수 있다.

answer = sorted(palindromes).pop()
print(answer)

>>> 906609

답은 잘 나온 것 같지만 무언가 좀 아쉽다...
문제에서 보여준 것 처럼 N = a * b의 형태로 출력이 된다면 더 좋을 것 같다.
그래서 최종적으로 다음과 같이 작성하였다.

a = 100
palindromes = []

def isPalindrome (n) :
    reverse_num = 0
    num = n
    while num > 0:             
        remainder = num % 10 
        reverse_num = reverse_num * 10 + remainder 
        num = num // 10   
    if reverse_num == n:
        return True
    return False

while a < 1000 :
    b = 100 
    while b < 1000:
        if isPalindrome(a*b) :
            palindromes.append((a*b, a, b))  # a,b의 값도 출력에 활용하고 싶으니 묶어서 튜플로
        b += 1
    a += 1

largest = sorted(palindromes).pop()
answer = f"{largest[0]} = {largest[2]} * {largest[1]}"

print(answer)


>>> 906609 = 913 * 993

원하던 형식의 출력이 나왔으니 오늘은 여기까지.

-2024.12.23-

profile
focus on backend

0개의 댓글