1부터 100까지의 숫자 중에서 매직 넘버(magic number)를 찾아 판다스 시리즈로 변환하면 다음과 같은 결과를 얻을 수 있습니다.
magic number series: 0 1 1 10 2 19 3 28 4 37 5 46 6 55 7 64 8 73 9 82 10 91 11 100
매직 넘버란 각 자릿수의 합이 최종적으로 1이 되는 수를 의미합니다. 예를 들어 10은 1+0=1이므로 매직 넘버이며, 19는 1+9=10이 되고 다시 1+0=1이 되어 매직 넘버에 해당합니다. 이 문제는 두 가지 방법으로 해결할 수 있습니다.
해결 방법 1: 람다 필터 함수 활용
리스트 컴프리헨션(list comprehension)을 사용하여 1부터 100까지의 값을 리스트 ls에 저장합니다.
ls = [i for i in range(1,101)]
람다(lambda) 필터 함수를 적용하여 9로 나눈 나머지가 1인 값만 추출합니다.
l = list(filter(lambda i:i%9==1,ls))
필터링된 리스트 l로 판다스 시리즈를 생성합니다.
pd.Series(l)
예제 코드
아래 코드를 통해 더 쉽게 이해할 수 있습니다.
import pandas as pd
ls = [i for i in range(1,101)]
l = list(filter(lambda i:i%9==1,ls))
print("magic number series:\n",pd.Series(l))출력 결과
magic number series: 0 1 1 10 2 19 3 28 4 37 5 46 6 55 7 64 8 73 9 82 10 91 11 100
해결 방법 2: 자릿수 합 계산
빈 리스트를 하나 생성합니다.
for 반복문의 범위를 1부터 101 미만으로 설정하고, 자릿수 합을 저장할 변수 digit_sum을 0으로 초기화합니다.
for i in range(1,101): digit_sum = 0
i 값을 임시 변수 temp에 할당하여 원본 값이 변경되지 않도록 합니다.
while 반복문의 조건을 temp > 0으로 설정합니다.
나머지 연산과 몫 연산을 활용해 자릿수 합을 다음과 같이 계산합니다.
while(temp>0): rem = temp % 10 digit_sum = digit_sum + rem temp = temp // 10
마지막으로 if 조건문으로 digit_sum이 1 또는 10인지 확인하고, 조건이 참이면 해당 값을 리스트에 추가합니다.
if(digit_sum==1 or digit_sum==10): l.append(i)
최종적으로 완성된 리스트로부터 판다스 시리즈를 생성합니다.
예제 코드
다음 전체 코드를 통해 로직을 더 자세히 살펴보겠습니다.
import pandas as pd
l = []
for i in range(1,101):
digit_sum = 0
temp = i
while(temp>0):
rem = temp % 10
digit_sum = digit_sum + rem
temp = temp // 10
if(digit_sum==1 or digit_sum==10):
l.append(i)
print("magic number series:\n",pd.Series(l))출력 결과
magic number series: 0 1 1 10 2 19 3 28 4 37 5 46 6 55 7 64 8 73 9 82 10 91 11 100
첫 번째 방법은 수학적 규칙(9로 나눈 나머지가 1)을 활용해 간결하게 처리하는 반면, 두 번째 방법은 자릿수 합을 직접 계산하므로 매직 넘버의 정의를 명확하게 구현한다는 장점이 있습니다. 상황에 맞게 선택하여 활용하시기 바랍니다.