본문 바로가기

Computer Science/Euler Project

Problem 4: Largest palindrome product

728x90
💡 (프로젝트 오일러 4번문제) 앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다. 두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009(= 91×99) 입니다.
세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까?
문제출처: https://euler.synap.co.kr/problem=4

 

Python의 문자열 인덱싱(indexing) 및 반복/조건문 활용하기

 

대칭수란,

 

숫자를 순서대로 읽어도, 역순으로 읽어도 같은 수를 대칭수라고 한다.

(예를들면, 1221, 4554 등의 숫자가 해당된다.)

 

위 문제를 풀기 위해서는 문자열 인덱싱(indexing)을 알아야 하는데,

 

이를 위해 먼저 정수(int)로 입력된 값을 문자열(string) 형태로 바꾸어 주어야 한다.

 

 아래와 같이 입력된 숫자를 문자(string)형태로 바꾸어주고, ‘n_str’이라는 변수로 지정한다.

n_str = str(숫자)
# str(숫자)는 숫자를 문자열로 바꾸어주는 메서드

 

그리고, 문자열 인덱싱을 활용하여 문자열의 순서를 뒤집어준다.

n_str[::-1]

 

문자열 인덱싱에서, 대괄호 안은 [시작값 : 끝값 : 간격]을 의미하므로,

 

[::-1]을 입력하면 시작과 끝값은 기본값으로, 간격은 역순('-1')으로 지정되어 문자열을 뒤집을 수 있다.

※여기서, 숫자를 문자열로 바꾸지 않고 인덱싱을 하면 subscriptable error가 발생한다.

 

마지막으로, 조건문을 활용하여 숫자로 순서대로 읽은 값과, 역순으로 읽은 값을 비교하여 일치하는 값을 찾아내면

 

정답을 도출할 수 있다.

 

정답은 아래 '더보기'를 클릭!

더보기
Answer: 906609

 


Code
#
# Problem 4. Largest palindrome product
# Link : https://projecteuler.net/problem=4
#

# Define 'Cal' function to calculate result value
def Cal():
     result = 0
     for i in range(100, 1000):
          for j in range(100, 1000):
               n = i * j
               n_str = str(n)

               if n_str == n_str[::-1] and n > result:
                    result = n
     return result

if __name__ == "__main__":
     print(Cal())
728x90