데이터

제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-17

Leah (리아) 2025. 11. 4. 14:11
반응형

 Chapter 02. 기초수학 문제풀이

 

최소공배수, 진법, 등차수열 (Python 기초 실습)

 

주요 개념

이번 강의에서는 세 가지 핵심 주제를 다루었다.

  1. 두 수의 최대공약수(GCD) 를 활용해 최소공배수(LCM) 구하기
  2. 2·8·16진수와 10진수 간의 진법 변환
  3. 수열의 일반항과 합을 구하는 등차수열(Arithmetic Sequence)

1. 최소공배수 (Least Common Multiple)

최소공배수(LCM) 는 두 수의 공배수 중 가장 작은 수를 의미한다.
예를 들어

3의 배수: 3, 6, 9, 12, 15, …
5의 배수: 5, 10, 15, 20, 25, …
→ 공배수: 15, 30, 45, …
최소공배수 = 15

💡 수학적으로는 LCM(a, b) = (a * b) / GCD(a, b) 로 구할 수 있다.


코드 예시

import random

rNum1 = random.randint(100, 1000)
rNum2 = random.randint(100, 1000)
print(f'rNum1: {rNum1}')
print(f'rNum2: {rNum2}')

maxNum = 0

# 최대공약수 구하기
for n in range(1, (min(rNum1, rNum2) + 1)):
    if rNum1 % n == 0 and rNum2 % n == 0:
        maxNum = n

# 최소공배수 계산
lcm = (rNum1 * rNum2) // maxNum

print(f'최대공약수: {maxNum}')
print(f'최소공배수: {lcm}')

 

실행 결과

 
rNum1: 194
rNum2: 127
최대공약수: 1
최소공배수: 24638

2. 진법 변환 (Number Base Conversion)

이번 실습에서는 10진수를 다른 진수로 변환하거나,
2·8·16진수를 다시 10진수로 변환하는 코드를 작성했다.

  • 10진수 ➡ 2·8·16진수
  • 2·8·16진수 ➡ 10진수
  • 서로 다른 진수 간 변환

코드 예시

# 2진수, 8진수, 16진수를 10진수로 변환
print('2진수(0b10101) -> 10진수({})'.format(int('0b10101', 2)))
print('8진수(0o135) -> 10진수({})'.format(int('0o135', 8)))
print('16진수(0x5f) -> 10진수({})'.format(int('0x5f', 16)))

# 10진수를 다른 진수로 변환
num = 1117
print('10진수({}) -> 2진수({})'.format(num, bin(num)))
print('10진수({}) -> 8진수({})'.format(num, oct(num)))
print('10진수({}) -> 16진수({})'.format(num, hex(num)))

 

실행 결과

 
2진수(0b10101) -> 10진수(21)
8진수(0o135) -> 10진수(93)
16진수(0x5f) -> 10진수(95)
10진수(1117) -> 2진수(0b10001011101)
10진수(1117) -> 8진수(0o2135)
10진수(1117) -> 16진수(0x45d)

 

bin(), oct(), hex() 함수는 각각 2·8·16진수 변환을 담당한다.
int(문자열, base) 형태로 입력하면 특정 진법의 수를 10진수로 바꿀 수 있다.


3. 등차수열 (Arithmetic Sequence)

등차수열은 항 사이의 차이가 일정한 수열이다.
예: {4, 10, 16, 22, 28, …}
→ 공차 d = 6

공식:

  • 일반항: aₙ = a₁ + (n - 1) * d
  • 합: Sₙ = n * (a₁ + aₙ) / 2

코드 예시

 
inputA1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))

valueN = 0
sumN = 0
n = 1

while n <= inputN:
    if n == 1:
        valueN = inputA1
        sumN += valueN
        print('{}번째 항의 값: {}'.format(n, valueN))
        print('{}번째 항까지의 합: {}'.format(n, sumN))
        n += 1
        continue

    valueN += inputD
    sumN += valueN
    print('{}번째 항의 값: {}'.format(n, valueN))
    print('{}번째 항까지의 합: {}'.format(n, sumN))
    n += 1

 

실행 예시

 
a1 입력: 4
공차 입력: 6
n 입력: 5
1번째 항의 값: 4
1번째 항까지의 합: 4
2번째 항의 값: 10
2번째 항까지의 합: 14
...
5번째 항의 값: 28
5번째 항까지의 합: 70

 

* 이 글은 제로베이스 데이터사이언스 파트타임 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.


 

💡 생각 정리

이번 세 가지 실습은 수학의 기본 원리를 프로그래밍적으로 구현하는 과정이었다.

  • 최소공배수에서는 최대공약수 로직을 재활용해 효율적으로 계산하는 방법을 배웠고,
  • 진법 변환에서는 bin(), oct(), hex() 함수와 int()의 활용법을 익혔다.
  • 등차수열은 단순 반복 구조 속에서 조건 분기와 누적합 개념을 복습할 수 있었다.

각 주제는 단순해 보이지만, 실제 알고리즘 문제 풀이의 기초가 되는 개념들이라
하나하나 직접 코드를 써보며 논리 흐름을 잡는 게 중요하다고 느꼈다.


🚀 적용점

 

  • LCM 코드는 유클리드 호제법으로 개선 가능
  • 진법 변환은 데이터 암호화·인코딩 로직에 활용 가능
  • 등차수열은 반복 패턴을 가진 데이터 처리(예: 시계열 데이터) 에 응용 가능

 

반응형