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

Python으로 범위 내 완전제곱수이면서 자릿수 합이 10 미만인 숫자 모두 찾기

특정 범위 안에서 완전제곱수(perfect square)이면서 동시에 각 자릿수의 합이 10보다 작은 숫자를 모두 찾아야 하는 경우가 있습니다. 이럴 때 파이썬(Python)의 리스트 컴프리헨션(list comprehension)을 활용하면 단 몇 줄의 코드로 간결하게 문제를 해결할 수 있습니다.

예제 코드

lower_limit = int(input("Enter the lower range: "))
upper_limit = int(input("Enter the upper range: "))
my_list = []
my_list = [x for x in range(lower_limit,upper_limit+1) if (int(x**0.5))**2==x and
sum(list(map(int,str(x))))<10]
print("The result is : ")
print(my_list)

실행 결과

Enter the lower range: 5
Enter the upper range: 12
The result is :
[9]

코드 설명

  • 사용자로부터 하한(lower limit)과 상한(upper limit) 값을 입력받습니다.

  • 결과를 저장할 빈 리스트를 하나 정의합니다.

  • 리스트 컴프리헨션을 사용하여 하한부터 상한까지의 모든 숫자를 순회(iterate)합니다.

  • (int(x**0.5))**2 == x 조건으로 해당 숫자가 완전제곱수인지 검사합니다. 제곱근을 구한 뒤 정수로 변환하고 다시 제곱했을 때 원래 값과 일치하는지 확인하는 방식입니다.

  • sum(list(map(int, str(x)))) 부분은 숫자를 문자열로 변환한 후 각 자릿수를 정수로 바꾸어 모두 더하는 역할을 합니다.

  • 두 조건을 모두 만족하는 숫자만 최종 리스트에 포함됩니다.

  • 완성된 리스트를 변수에 할당한 뒤 콘솔에 출력합니다.

핵심 로직 정리

위 예제에서 입력 범위는 5부터 12까지입니다. 이 범위에서 완전제곱수는 9가 유일하며, 9의 자릿수 합은 9로 10보다 작기 때문에 최종 결과로 [9]만 출력됩니다. 이처럼 리스트 컴프리헨션 안에 조건문을 결합하면 복잡한 필터링 로직도 한 줄로 처리할 수 있어 코드의 가독성과 효율성이 크게 향상됩니다.