반응형
Chapter 02. 기초수학 문제풀이
최소공배수, 진법, 등차수열 (Python 기초 실습)
주요 개념
이번 강의에서는 세 가지 핵심 주제를 다루었다.
- 두 수의 최대공약수(GCD) 를 활용해 최소공배수(LCM) 구하기
- 2·8·16진수와 10진수 간의 진법 변환
- 수열의 일반항과 합을 구하는 등차수열(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 코드는 유클리드 호제법으로 개선 가능
- 진법 변환은 데이터 암호화·인코딩 로직에 활용 가능
- 등차수열은 반복 패턴을 가진 데이터 처리(예: 시계열 데이터) 에 응용 가능
반응형
'데이터' 카테고리의 다른 글
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-19 (0) | 2025.11.07 |
|---|---|
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-18 (0) | 2025.11.05 |
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-16 (0) | 2025.11.03 |
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-15 (0) | 2025.11.02 |
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-14 (0) | 2025.11.01 |