이 글에서는 주어진 숫자의 배수가 존재하는 인덱스 위치를 찾는 파이썬 프로그램을 다룹니다. NumPy와 Pandas 라이브러리를 활용하면 이 작업을 효율적으로 수행할 수 있습니다.
알고리즘
1단계: Pandas 시리즈를 정의합니다. 2단계: 사용자로부터 숫자 n을 입력받습니다. 3단계: NumPy 라이브러리의 argwhere() 함수를 사용하여 시리즈에서 해당 숫자의 배수를 찾습니다.
기본 예제 코드
가장 직관적인 방법은 반복문과 나머지 연산자(%)를 사용하는 것입니다. 1부터 19까지의 숫자 배열을 만든 뒤, 입력받은 숫자로 나누어 떨어지는 값만 골라냅니다.
import numpy as np
listnum = np.arange(1, 20)
multiples = []
print("NumList:\n", listnum)
n = int(input("배수를 찾을 숫자를 입력하세요: "))
for num in listnum:
if num % n == 0:
multiples.append(num)
print("{}의 배수는 {}입니다".format(n, multiples))
실행 결과
NumList: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] 배수를 찾을 숫자를 입력하세요: 5 5의 배수는 [5, 10, 15]입니다
NumPy 벡터화 연산으로 개선하기
반복문 방식은 이해하기 쉽지만, 데이터 크기가 커지면 처리 속도가 느려질 수 있습니다. NumPy의 벡터화 연산과 argwhere() 함수를 함께 사용하면 배수의 값과 인덱스 위치를 한 번에 구할 수 있습니다.
import numpy as np
listnum = np.arange(1, 20)
n = int(input("배수를 찾을 숫자를 입력하세요: "))
# 나머지 연산으로 불리언 마스크 생성
mask = (listnum % n == 0)
# 배수의 인덱스 위치 찾기
indices = np.argwhere(mask).flatten()
# 배수 값 추출
multiples = listnum[mask]
print("인덱스 위치:", indices)
print("{}의 배수: {}".format(n, multiples))
실행 결과
배수를 찾을 숫자를 입력하세요: 5 인덱스 위치: [ 4 9 14] 5의 배수: [ 5 10 15]
코드 설명
np.arange(1, 20): 1부터 19까지의 정수 배열을 생성합니다.listnum % n == 0: 각 요소를 n으로 나눈 나머지가 0인지 검사하여 불리언 마스크를 만듭니다.np.argwhere(mask): 조건이 참(True)인 요소의 인덱스를 반환합니다.listnum[mask]: 마스크를 이용해 조건에 해당하는 실제 값들만 추출합니다.
마무리
반복문 방식은 초보자에게 직관적이지만, 대용량 데이터를 다룰 때는 NumPy의 벡터화 연산이 훨씬 빠르고 효율적입니다. 데이터 크기와 목적에 맞게 두 방식을 적절히 선택하여 활용하시기 바랍니다.