[Python] 코딩 도장 - palindrome
Updated:
코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.
코딩 도장에서 여러 문제를 확인할 수 있습니다.
난이도 순으로 차근차근 풀어보려 합니다.
[문제: palindrome] - Lv.1
앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다.
두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009 (= 91 × 99) 입니다.
세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까?
출처: https://codingdojang.com/scode/562?answer_mode=hide
[풀이]
a = {}
for i in range(100, 1000):
for j in range(i,1000):
n = str(i*j)
# 대칭인 경우만 저장
if n == n[::-1]:
a[i,j] = int(n)
# 정렬 후 리스트로 변환
a = sorted(a.items(), reverse=True, key=lambda x: x[1])
a[0]
((913, 993), 906609)
문자열에 [::-1]
을 적용해서 문자열을 뒤집어 같은 경우만 저장하는 방식으로 코드를 짰다.
[추천 풀이]
def is_palindrome(n):
s = str(n)
return s == s[::-1]
def main():
m = 0
for i in range(999, 99, -1):
for j in range(999, 99, -1):
n = i * j
if is_palindrome(n) and m < n:
m = n
print(m)
main()
906609
다른 분이 푸신 풀이 중 추천 수가 많은 풀이이다.
똑같이 [::-1]
을 이용해서 풀었고 결과 값 출력 방법만 살짝 다르다.
[::-1]
은 [시작:끝:증감]
에서 증감을 -1로 두었기에 뒤에서부터 출력하는 것이다.
Leave a comment