Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 특정 범위 내에서 홀수이면서 회문인 숫자 모두 찾기

주어진 범위 사이에 있는 숫자 중 홀수이면서 동시에 회문(palindrome)인 모든 숫자를 찾아야 하는 경우가 있습니다. 이때 재귀 함수를 사용하지 않고 해결하려면 리스트 컴프리헨션(list comprehension)'%' 연산자를 활용하면 간단하게 구현할 수 있습니다.


회문이란 왼쪽에서 오른쪽으로 읽어도, 오른쪽에서 왼쪽으로 읽어도 같은 문자열을 의미합니다. 예를 들어 121, 13331처럼 앞뒤가 똑같은 숫자가 여기에 해당합니다.


예제 코드

my_list = []
lower_limit = 5
upper_limit = 189
print("하한값 : ")
print(lower_limit)
print("상한값 : ")
print(upper_limit)
my_list = [x for x in range(lower_limit, upper_limit+1) if x%2 != 0 and str(x) == str(x)[::-1]]
print(str(lower_limit) + "부터 " + str(upper_limit) + " 사이의 홀수이면서 회문인 숫자들 : ")
print(my_list)

실행 결과

하한값 :
5
상한값 :
189
5부터 189 사이의 홀수이면서 회문인 숫자들 :
[5, 7, 9, 11, 33, 55, 77, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181]

코드 설명

  • 빈 리스트와 하한값(lower limit), 상한값(upper limit)을 정의합니다.
  • 정의된 상한값과 하한값을 콘솔에 출력합니다.
  • 리스트 컴프리헨션을 사용해 범위 내의 모든 값을 순회하면서, '%' 연산자로 해당 값이 2로 나누어지지 않는지(즉, 홀수인지) 확인합니다.
  • 동시에 숫자를 문자열로 변환한 뒤, 슬라이싱([::-1])을 통해 문자열을 뒤집은 것과 원래 문자열을 비교하여 회문 여부를 판별합니다.
  • 두 조건을 모두 만족하는 값들만 리스트에 저장됩니다.
  • 최종 결과 리스트를 콘솔에 출력합니다.

핵심 포인트 정리

  • x % 2 != 0 : 나머지 연산자를 활용해 홀수 여부를 검사합니다.
  • str(x) == str(x)[::-1] : 파이썬의 슬라이싱 기법으로 문자열을 역순으로 만들어 회문인지 확인합니다.
  • 재귀 호출 없이 한 줄의 리스트 컴프리헨션으로 조건 필터링이 가능하여 코드가 간결하고 가독성이 뛰어납니다.