✏️데이터 취업 스쿨 스터디 노트(기초 수학①)

Cheon Bumin·2023년 12월 6일

Study Note✏️

목록 보기
1/17

Part 02. 수학

  • 약수와 소수
  • 소인수와 소인수분해
  • 최대공약수
  • 최소공배수

오늘 공부 요약짤...🥲

📌약수와 소수 구하기!

약수

 → 어떤 수를 나누어 떨어지게 하는 수

inputNum = int(input('0보다 큰 정수 입력 :'))

for num in range(1, (inputNum+1)) :
    if inputNum % num == 0 :
        print('{}의 약수 : {}'. format(inputNum, num))
⭐
- (변수 선언) 사용자에게 입력받는 정수를 inputNum이라는 변수로 저장
- (for ~ in 반복문) 1부터 inputNum까지 반복해라
- (if 조건문) 만약 inputNum을 num으로 나누고 난 나머지가 0이라면
- (출력 코드) inputNum의 약수 : num. 이라는 문구 출력

소수

 → 1과 자신만을 약수로 가지는 수 (단, 1은 제외)

inputNum = int(input('0보다 큰 정수 입력 :'))

for num in range(2, (inputNum+1)) :
   flag = True
   for n in range(2, num) :
       if num % n == 0 :
           flag = False
           break
   if (flag) :
       print(f'{num} : 소수!!')
   else :
       print(f'{num} : 합성수!!')
⭐
- (변수 선언) 사용자에게 입력받는 정수를 inputNum이라는 변수로 저장
- (for ~ in 반복문) 2부터 inputNum까지 반복해라
- (반복문 내 변수 선언) flag는 참이다
- (중첩 반복문, for ~ in 반복문) 2부터 num까지 반복해라
- (if 조건문) num을 n으로 나눈 나머지가 0이라면
- flag는 거짓이되고 (반복문을) break 한다
- (if else 조건문) 만약 flag가 참이면
- (출력코드) num : 소수!! 라는 문구 출력
- flag가 거짓이면 
- (출력 코드) num : 합성수!! 라는 문구 출력

📌소인수분해!

소인수

→ 약수(인수) 중에서 소수인 숫자를 소인수라고 한다.
→ 소수와 인수의 합쳐진 말

inputNum = int(input('1보다 큰 정수 입력 : '))

n = 2
while n <= inputNum :
   if inputNum % n ==  0 :
       print(f'소인수 : {n}')
       inputNum /= n

   else :
       n += 1
⭐
- (변수 선언) 사용자에게 입력받는 정수를 inputNum이라는 변수로 저장
- (변수 선언) n = 2
- (while 반복문) n이 inputNum보다 작거나 같을 때까지 반복해라
- (if else 조건문) 만약 inputNum을 n으로 나눈 나머지가 0이라면
- (출력 코드) 소인수 : n. 이라고 출력
- inputNum에 n을 나눈 값을 inputNum으로 설정, while 반복문 재시작
- (else) inputNum을 n으로 나눈 나머지가 0이 아닐 때 n에 1을 더해서 while 반복문 재시작

소인수분해

 → 1보다 큰 정수를 소인수의 곱으로 나타낸 것을 소인수분해라고 한다.

inputNum = int(input('1보다 큰 정수 입력 : '))

n = 2
numList = []
while n <= inputNum :
   if inputNum % n ==  0 :
       print(f'소인수 : {n}')
       if numList.count(n) == 0 :
           numList.append(n)
       elif numList.count(n) == 1 :
           numList.remove(n)
       inputNum /= n

   else :
       n += 1

print(numList)
⭐
- (변수 선언) 사용자에게 입력받는 정수를 inputNum이라는 변수로 저장
- (변수 선언) n = 2
- (리스트 선언) numList 초기화
- (while 반복문) n이 inputNum보다 작거나 같을 때까지 반복해라
- (if else 조건문) 만약 inputNum을 n으로 나눈 나머지가 0이라면
- (출력 코드) 소인수 : n. 이라고 출력
- (중첩 조건문, if elif) numList 속 요소 개수가 0이라면
- numList로 n을 수집해라
- (elif) numList 속 요소 개수가 1이라면
- numList에 있는 n을 삭제해라
- inputNum에 n을 나눈 값을 inputNum으로 설정, while 반복문 재시작
- (else) inputNum을 n으로 나눈 나머지가 0이 아닐 때 n에 1을 더해서 while 반복문 재시작

📌공약수, 최대공약수

최대공약수

→ (공약수) 두 개 이상의 수에서 공통된 약수를 공약수라고 한다.
→ (최대공약수) 공약수 중 가장 큰 수를 최대공약수라고 한다.

num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))
maxNum = 0

for n in range(1, num1 +1) :
   if num1 % n == 0 and num2 % n == 0 :
       print (f'공약수 : {n}')
       maxNum = n

print(f'최대 공약수 : {maxNum}')
⭐
- (변수 선언) 사용자에게 입력받은 정수를 num1로 선언한다
- (변수 선언) 사용자에게 입력받은 정수를 num2로 선언한다
- (변수 선언) maxNum은 0으로 선언한다
- (for ~ in 반복문) 1부터 num1회까지 반복해라
- (if 조건문) num1을 n으로 나눈 나머지가 0이고 num2를 n으로 나눈 나머지가 0이라면
- (출력 코드) 공약수 : n. 이라는 문구 출력
- maxNum은 n이 된다
- (출력 코드) 최대공약수 : maxNum. 이라는 문구 출력

유클리드 호제법

 → x(작은 수) / y(큰 수)의 r(나머지)로 y를 r이 0이 될 때까지 계속 나누면 최대공약수를 구할 수 있다.

num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))

temp1 = num1 ; temp2 = num2

while temp2 > 0 :
   temp = temp2
   temp2 = temp1 % temp2
   temp1 = temp

   print(f'{num1}, {num2}의 최대 공약수 : {temp1}')

for n in range(1, temp1 +1) :
   if temp1 % n == 0 :
       print(f'{num1}, {num2}의 공약수 : {n}')
⭐
- (변수 선언) 사용자에게 입력받은 정수를 num1로 선언한다
- (변수 선언) 사용자에게 입력받은 정수를 num2로 선언한다
- (변수 선언) num1과 num2를 각각 temp1과 temp2로 선언한다
- (while 반복문) temp2가 0보다 클 때까지 반복해라
- temp은 temp2의 값이다
- temp2는 temp1을 temp2로 나눈 나머지 값이다.
- temp1은 temp이다
- (출력코드) num1, num2의 최대공약수 : temp1. 이라는 문구 출력
- (for~in 반복문) 1부터 temp1회까지 반복해라
- (if 조건문) temp1을 n으로 나눈 나머지가 0이라면
- (출력 코드) num1, num2의 공약수 : n. 이라는 문구 출력

📌공배수, 최소공배수

최소공배수

→ (공배수) 두 개 이상의 수에서 공통된 배수.
→ (최소공배수) 소인수분해를 이용하면 최소공배수 및 공배수를 구할 수 있다.
→ 최소 공배수를 구하려고 하는 두 숫자의 곱에 최대공약수를 나눠서 얻어지는 몫의 값이 최소공배수.

num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))
num3 = int(input('1보다 큰 정수 입력 : '))
maxNum = 0

for n in range(1, num1 +1) :
   if num2 % n == 0 and num1 % n == 0:
       maxNum = n

minNum = (num1 * num2) // maxNum

#num1과 num2의 최소공배수가 num3 보다 작다는 전제하에 코드 작성

for i in range (1, minNum +1) :
   if minNum % i == 0 and num3 % i == 0 :
       # print(f'공약수 : {n}')
       maxNum = i

minimumNum = (minNum * num3) // maxNum
print(f'최대공약수 : {maxNum}')
print(f'최소공배수 : {minimumNum}')
⭐
- (변수 선언) 사용자에게 입력받은 정수를 num1로 선언한다
- (변수 선언) 사용자에게 입력받은 정수를 num2로 선언한다
- (변수 선언) 사용자에게 입력받은 정수를 num3로 선언한다
- (변수 선언) maxNum은 0으로 선언한다
- (for~in 반복문) 1부터 num1회까지 반복해라
- (if 조건문) num2를 n으로 나눈 나머지가 0이고 num1을 n으로 나눈 나머지가 0이라면
- maxNum은 n이 된다
- minNum은 num1과 num2를 더한 값에 maxNum을 나눈 몫이다
- (for ~ in 반복문) 1부터 minNum회까지 반복해라
- (if 조건문) minNum를 i으로 나눈 나머지가 0이고 num3을 i으로 나눈 나머지가 0이라면
- maxNum은 i가 된다
- minimumNum은 minNum과 num3의 곱에 maxNum을 나눈 몫이다
- (출력코드) 최대공약수 : maxNUm. 이라는 코드 출력
- (출력코드) 최소공배수 : minimumNum. 이라는 코드 출력

하루 공부를 마치며🔥

오늘 강의 8개를 듣고 실습문제를 푸는데 총 4시간 20분을 사용했다...
강의 하나가 10~15분인 것을 감안하였을 때 너무 오랫동안 시간 낭비를 하고 있는 것 같다.
사실 강의를 듣고 문제풀이가 바로 이해가 되는 것이 아니기에 왜 이런 코드를 사용했고 다른 코드나 함수로는 풀이가 어려운지 고민하는데 시간을 많이 사용하고 있다.
앞으로는 강의를 먼저 듣고 문제 풀이에 집중하는 시간을 가지는 방법으로 진행해봐야할 것 같다ㅠ

profile
포기만 하지 말자

0개의 댓글