[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