특정 범위 안에서 완전제곱수(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]만 출력됩니다. 이처럼 리스트 컴프리헨션 안에 조건문을 결합하면 복잡한 필터링 로직도 한 줄로 처리할 수 있어 코드의 가독성과 효율성이 크게 향상됩니다.