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
'Computer Science > Euler Project' 카테고리의 다른 글
Problem 3: Largest prime factor (0) | 2022.10.03 |
---|---|
Problem 2: Even Fibonacci numbers (0) | 2022.10.02 |
[코딩문제] 오일러 프로젝트 1번(Problem 1: Multiples of 3 or 5) (0) | 2022.10.02 |