일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- barh
- pandas filter
- Folium
- python
- 머신러닝
- 파이썬
- numpy
- 재귀함수
- DataFrame
- matplotlib
- pandas
- Slicing
- 등비수열
- pandas 메소드
- 자료구조
- 기계학습
- 리스트
- Machine Learning
- 순열
- 스터디노트
- plt
- 통계학
- maplotlib
- 조합
- 등차수열
- MacOS
- 문제풀이
- SQL
- INSERT
- tree.fit
Archives
- Today
- Total
코딩하는 타코야끼
[스터디 노트] Week3_2일차 [unit31 ~ 45] - 기초수학 문제풀이 본문
728x90
반응형
1. 기초수학 문제풀이_1 [unit 31 ~ 35]
📍 [연습문제] 약수와 소수
- 100부터 1000사이의 난수에 대해서 약수, 소수, 그리고 소인수를 출력하는 프로그램을 만들어보자.
import random
num_r = random.randint(100, 1000)
num_y = [] # 약수
num_s = [] # 소수
num_sy = [] # 소인수
for i in range(1, (num_r + 1)):
soinsu = 0
# 약수
if num_r % i == 0:
num_y.append(i)
soinsu += 1
# 소수
if i != 1:
is_prime = True
for num in range(2, int(i ** 0.5) + 1):
if i % num == 0:
is_prime = False
break
if is_prime:
num_s.append(i)
soinsu += 1
# 소인수
if soinsu >= 2:
num_sy.append(i)
print(f"난수: {num_r}")
print(f"약수: {num_y}")
print(f"소수: {num_s}")
print(f"소인수: {num_sy}")
>>>
난수: 339
약수: [1, 3, 113, 339]
소수: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41,.....331, 337]
소인수: [3, 113
📍 [연습문제] 소인수와 소인수분해
- 100부터 1000사이의 난수를 소인수분해를 하고 각각의 소인수에 대한 지수를 출력하는 프로그램을 만들어보자.
import random
num_r = random.randint(100, 1000)
print(f"난수: {num_r}")
soin_list = []
n = 2
while 2 <= num_r:
if num_r % n == 0:
soin_list.append(n)
num_r /= n
else:
n += 1
print(f"소인수: {soin_list}")
temp_num = 0
for s in soin_list:
if temp_num != s:
print(f"[{s}] 의 갯수: {soin_list.count(s)}")
temp_num = s
>>>
난수: 270
소인수: [2, 3, 3, 3, 5]
[2] 의 갯수: 1
[3] 의 갯수: 3
[5] 의 갯수: 1
📍 [연습문제] 최소공배수
- 100부터 1000사이의 2개의 난수에 대해서 최대공약수와 최소공배수를 출력하는 프로그램을 만들어보자.
import random
num_r1 = random.randint(100, 1000)
num_r2 = random.randint(100, 1000)
print(f"난수1: {num_r1}")
print(f"난수2: {num_r2}")
max_num = 0
for i in range(1, min(num_r1, num_r2) + 1):
if num_r1 % i == 0 and num_r2 % i == 0:
max_num = i
min_num = (num_r1 * num_r2) // max_num
print(f"두 난수에 대한 최대공약수: {max_num}")
print(f"두 난수에 대한 최소공약수: {min_num}")
>>>
난수1: 756
난수2: 174
두 난수에 대한 최대공약수: 6
두 난수에 대한 최소공약수: 21924
📍 [연습문제] 진법
- 사용자가 입력한 수를 이용해서, 다음 내용에 따라 진법 변환하는 코드를 작성해보자.
num = int(input("숫자 입력: "))
num_bin = bin(num)
num_oct = oct(num)
num_hex = hex(num)
print(f"정수 -> 2진수: {num_bin}")
print(f"정수 -> 8진수: {num_oct}")
print(f"정수 -> 16진수: {num_hex}")
print("2진수(0b1010) -> 10진수({})".format(int(0b1010)))
print("8진수(0o12) -> 10진수({})".format(int(0o12)))
print("16진수(0xa) -> 10진수({})".format(int(0xa)))
>>>
숫자 입력: 10
정수 -> 2진수: 0b1010
정수 -> 8진수: 0o12
정수 -> 16진수: 0xa
2진수(0b1010) -> 10진수(10)
8진수(0o12) -> 10진수(10)
16진수(0xa) -> 10진수(10)
2. 기초수학 문제풀이_2 ~ 3 [unit 36 ~ 45]
📍 [연습문제] 등차수열
- 다음 수열의 일반항을 구하고 n번째항의 값과 합을 구하는 프로그램을 만들어보자.
- {4, 10, 16, 22, 28, 34, 40, 46, 52, 58, 64... }
a1 = int(input("a1: "))
d = int(input("공차(d): "))
n = int(input("n번째 항: "))
result_basic = a1 + (n-1) * d
result_final = int(n * (a1 + result_basic) / 2)
print(f"n번째 항 값: {result_basic}")
print(f"n번째 까지 합: {result_final}")
>>>
a1: 4
공차(d): 6
n번째 항: 3
n번째 항 값: 16
n번째 까지 합: 30
📍 [연습문제] 등비수열
- 다음 수열의 일반항을 구하고 n번째항의 값과 합을 구하는 프로그램을 만들어보자.
- {2, 6, 18, 54, 162, 486, 1458, 4374, 13122, ... }
a1 = int(input("a1: "))
r = int(input("공비(r): "))
n = int(input("n번째 항: "))
result_basic = a1 * r**(n - 1)
result_final = int(a1 * (1 - (r**n) / (1 - r)))
print(f"n번째 항 값: {result_basic}")
print(f"n번째 까지 합: {result_final}")
>>>
a1: 2
공비(r): 3
n번째 항: 4
n번째 항 값: 54
n번째 까지 합: 83
📍 [연습문제] 피보나치수열
- 피보나치수열에서 n항의 값과 n항까지의 합을 출력하는 프로그램을 만들어보자.
- {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...}
def fibonacci(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
a, b = 0, 1
for _ in range(n-1):
a, b = b, a + b
return b
num = int(input("숫자 입력: "))
fibo_l = []
for i in range(1, (num + 1)):
fibo_l.append(fibonacci(i))
print(f"n항의 값: {fibo_l[num-1]}")
print(f"n항 까지의 합: {sum(fibo_l[:num])}")
>>>
숫자 입력: 4
n항의 값: 3
n항 까지의 합: 7
📍 [연습문제] 팩토리얼
- 팩토리얼 프로그램을 만들되, 반복문을 이용한 함수와 재귀 함수를 이용해서
- 구현해보고 또한, 파이썬에서 제공하는 모듈도 사용해 보자.
def fac_fun1(n):
fac = 1
for i in range(1, (n+1)):
fac *= i
return fac
def fac_fun2(n):
if n == 1:
return n
return n * fac_fun2(n-1)
num = int(input("사용자 숫자 입력: "))
print(f"반복문을 이용한 {num}! 팩토리얼: {fac_fun1(num)}")
print(f"재귀함수를 이용한 {num}! 팩토리얼: {fac_fun2(num)}")
>>>
사용자 숫자 입력: 6
반복문을 이용한 6! 팩토리얼: 720
재귀함수를 이용한 6! 팩토리얼: 720
📍 [연습문제] 순열
- 파이썬을 이용해서 다음 순열들의 값을 구하는 프로그램을 만들어 보자.
num1 = int(input("숫자1 입력: "))
num2 = int(input("숫자2 입력: "))
result = 1
for i in range(num1, (num1- num2), -1):
result *= i
print(f"{result = }")
>>>
숫자1 입력: 7
숫자2 입력: 3
result = 210
📍 [연습문제] 조합
- 파이썬을 이용해서 다음 조합들의 값을 구하는 프로그램을 만들어 보자.
num_n = int(input("숫자1 입력: "))
num_r = int(input("숫자2 입력: "))
result_p = 1 # 순열
result_r = 1
result_c = 1 # 조합
for i in range(num_n, num_n - num_r, -1):
result_p *= i
print(f"{result_p = }")
for i in range(num_r, 0, -1):
result_r *= i
print(f"{result_r = }")
result_c = int(result_p / result_r)
print(f"{result_c = }")
>>>
숫자1 입력: 6
숫자2 입력: 2
result_p = 30
result_r = 2
result_c = 15
📍 [연습문제] 확률
- 박스에 ‘꽝’이 적힌 종이가 6장 있고, ‘선물’이 적힌 종이가 4장이 있을 때,
- 파이썬을 이용해서 ‘꽝’3장과 ‘선물’ 3장을 뽑는 확률(%)을 출력하자.
# 전체 경우의 수: 10C6
# 꽝: 6C3
# 선물: 4C3
# 전체의 경우의 수는: 꽝 * 선물 / 전체 경우의 수
def percent():
num_n = int(input("num_n 입력: "))
num_r = int(input("num_r 입력: "))
result_p = 1 # 순열
result_r = 1
result_c = 1 # 조합
for i in range(num_n, (num_n - num_r), -1):
result_p *= i
print(f"{result_p = }")
for i in range(num_r , 0, -1):
result_r *= i
print(f"{result_r = }")
result_c = int(result_p / result_r)
print(f"{result_c = }")
return result_c
# 전체 경우의 수
print("="*9, "전체 경우의 수", "="*9)
total = percent()
print("="*30)
# 꽝
print("="*13, "꽝", "="*13)
kk = percent()
print("="*30)
# 선물
print("="*13, "선물", "="*12)
gift = percent()
print("="*30)
result = (kk * gift) / total
print(f"percentage: {round(result * 100, 2)}")
>>>
========= 전체 경우의 수 =========
num_n 입력: 10
num_r 입력: 6
result_p = 151200
result_r = 720
result_c = 210
==============================
============= 꽝 =============
num_n 입력: 6
num_r 입력: 3
result_p = 120
result_r = 6
result_c = 20
==============================
============= 선물 ============
num_n 입력: 4
num_r 입력: 3
result_p = 24
result_r = 6
result_c = 4
==============================
percentage: 38.1
반응형
'zero-base 데이터 취업 스쿨 > 스터디 노트' 카테고리의 다른 글
[스터디 노트] Week3_4일차 [unit23 ~ 38] - 자료구조 (0) | 2023.07.23 |
---|---|
[스터디 노트] Week3_3일차 [unit1 ~ 22] - 자료구조 (0) | 2023.07.23 |
[스터디 노트] Week3_1일차 [unit15 ~ 30] - 기초수학 (0) | 2023.07.19 |
[스터디 노트] Week2_5일차 [unit1 ~ 14] - 기초수학 (0) | 2023.07.19 |
[스터디 노트] Week2_4일차 [unit53 ~ 65] (0) | 2023.07.15 |