728x90
약수(Common Divisor)란?
나누었을 때 나머지가 0인 수 -> n % d == 0
최대공약수(Greatest Common Divisor)란?
두 개 이상의 자연수(또는 정수)가 가지는 공통의 약수 중 최댓값
Q1. 공책 20개, 연필 12개를 학생들에게 똑같이 나누어 주는데 최대 몇 명의 학생들에게 나누어줄 수 있는가?
A. 4명
1. math 내장함수 사용
import math
print(math.gcd(20,12))
2. 유클리드 호제법 사용
# 1. 최대 공약수 구하기
note = 20
pen = 12
# 유클리드 호제법 사용
while note:
pen, note = note, pen % note
print(pen)
유클리드 호제법이란?
최대공약수를 구하는 알고리즘으로, 유클리드에 의해 발견된 방법이다.
호제법은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 방법을 뜻한다.
< 추가 문제 >
Q2. 어떤 자연수로 77을 나누면 나머지가 2이고, 92를 나누어도 나머지가 2이다. 어떤 자연수는 무엇인가?
A. 3
x=77
y=92
while x:
y, x = x, y % x
print(y+2)
Q3. 땅콩 78,696개, 호두 19,332개, 해바라기 73,500개를 사람들에게 똑같이 나누어 주려고 한다. 최대 몇 명에게 똑같이 나누어 줄 수 있는가?
A. 12명
# 세 가지 수의 최대 공약수 구하기
num1 = 78696
num2 = 19332
num3 = 73500
def gcd(a,b):
while b:
a, b = b, a%b
return a
print(gcd(gcd(num1,num2),num3))
Q4. <심화 문제> 1에서 100까지의 번호가 각각 붙어 있는 사물함이 번호 순서대로 있고, 100명의 학생이 있다.
- 사물함은 처음에 모두 닫혀있다.
- 학생은 한 명씩 사물함을 지나가며 사물함이 닫혀있으면 열고, 열려 있으면 닫고 지나간다.
- 2번 학생은 2의 배수 번호의 사물함만 건들 수 있다. 3번도 3의 배수 번호의 사물함만 건들 수 있으며 즉, 각 학생 번호의 배수인 번호가 붙어 있는 사물함만 건들 수 있다.
- 이와 같은 규칙으로 1번부터 100번까지의 학생들이 사물함을 지나간다면 열려 있는 사물함의 개수는 몇 개인가?
A. 10개
# 사물함 문제 1~100번까지
# 닫혀있는게 0
locker = [ 0 ] * 101
for i in range(1,101): # 1번부터 100번의 학생
for j in range(i,101,i): # 사물함 열림 여부
if locker[j] == 0 :
locker[j] = 1 # 1은 열린 사물함
else :
locker[j] = 0
print(locker)
cnt = []
# 열린 사물함(1)만 카운트
for i in locker:
if i == 1:
cnt.append(i)
print(len(cnt))
-> 이 문제는 자세히 보면 1부터 100까지 약수의 개수가 홀수이면 사물함이 열리게 된다.
즉, 완전 제곱수를 구하는 문제로 아래와 같이 간단하게 풀 수도 있다.
# 완전제곱수를 활용하여 구하기
locker2 = []
n= 100
i = 1
while( i**2 <= n ):
locker2.append(i**2)
i += 1
print('locker : ',locker2)
print(len(locker2))
완전 제곱수란?
정수의 제곱으로 된 수를 말한다. ex) 2의 2승, 3의 2승, 4의 2승,,,
출처 : Youtube 주니온TV 아무거나연구소의 코린아, 코딩하자! with 파이썬
수학을 알면 코드가 한결 가벼워진다.
공부를 하면서 초등학교 수학 문제를 풀던 때가 새록새록 떠올랐다.
728x90
'IT > 알고리즘' 카테고리의 다른 글
[python/알고리즘] 소인수분해 하기 (3) | 2021.05.07 |
---|---|
[python/알고리즘] 소수 구하기 (2) | 2021.05.06 |
[python/자료구조] 동적 계획법(Dynamic Programming) (0) | 2021.03.27 |
[python/자료구조] 재귀함수 (0) | 2021.02.15 |
[python/자료구조] DFS 와 BFS (0) | 2021.02.12 |
댓글
최근에 올라온 글
TAG
- Ai
- OpenCV
- slqd
- 주니온
- 알고리즘
- algorithm
- Min()
- SQLD
- sklearn
- SQL
- numpy
- 자료구조
- MongoDB
- Programmers
- 경사하강법
- 인공지능
- 프로그래머스
- 머신러닝
- 딥러닝
- db
- Max()
- 파이썬
- cnn
- Pandas
- Python
- Scikit
- Project
- 기계학습
- VGGNet
- 부스트코스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Total
- Today
- Yesterday
250x250