[제로베이스 데이터 취업스쿨] 23.06.19 스터디 노트

김준호·2023년 6월 19일
0
post-thumbnail

1. 기초수학 문제풀이

문제8. 시그마

inputN1 = int(input('첫째날 받은 쌀 :'))
inputR = int(input('둘째 이후째날 받은 쌀 :'))
inputN = int(input('n일 이후 받은 쌀 :'))

valueN = 0
sumN = 0
n= 1
while n <= inputN:
    if n == 1:
        valueN = inputN1
        sumN += valueN
        n+=1
        continue
    valueN *=inputR
    sumN += valueN
    print(f'{n}날 받은 쌀 : {sumN}')
    n+=1
print(f'{inputN}날 받은 총 쌀의 양 : {sumN}')
첫째날 받은 쌀 :2
둘째 이후째날 받은 쌀 :2
n일 이후 받은 쌀 :30
2날 받은 쌀 : 6
3날 받은 쌀 : 14
4날 받은 쌀 : 30
.
.
.
28날 받은 쌀 : 536870910
29날 받은 쌀 : 1073741822
30날 받은 쌀 : 2147483646
30날 받은 총 쌀의 양 : 2147483646

문제9. 계차수열

  • an의 일반항을 먼저 계산해서 계산식에 대입
#계차수열
# an = (3n^2-3n+4) / 2
#an의 일반항 공식을 먼저 구하고 공식으로 코드를 짜면 쉬움
numA1 = 2
numAN = int(input('an 입력: '))
valueN = (3*numAN ** 2 -3*numAN + 4) /2
print(f'{numAN}번째 항 : {int(valueN)}')
an 입력: 10
10번째 항 : 137

문제10. 피보나치 수열

inputN = int(input('n 입력: '))

valueN = 0; sumN = 0

valuePre2 = 0
valuePre1 = 0

n=1
while n <= inputN:
    if n ==1 or n ==2:
        valueN = 1
        valuePre1 = valueN
        valuePre2 = valueN
        sumN += valueN
        n+=1

    else:
        valueN = valuePre1 + valuePre2
        valuePre2 = valuePre1
        valuePre1 = valueN
        sumN += valueN
        n+=1
print(f'{inputN}번째 항의 값 : {valueN}')
print(f'{inputN}번째 항까지의 합 : {sumN}')
n 입력: 8
8번째 항의 값 : 21
8번째 항까지의 합 : 54

문제11. 팩토리얼(n!)

import math
inputN = int(input('n 입력 : '))
#반복문 함수
def factorialFun1(i):
    result = 1
    for i in range(1, i+1):
        result *= i
    return result

#재귀함수
def factorialFun2(n):
    if n == 1:
        return n
    return n * factorialFun2(n-1)

print(f'반복문 함수를 사용한 {inputN}의 팩토리얼 : {factorialFun1(inputN)}')
print(f'재귀함수를 사용한 {inputN}의 팩토리얼 : {factorialFun2(inputN)}')
print(f'모듈을 사용한 {inputN}의 팩토리얼 : {math.factorial(inputN)}')
n 입력 : 5
반복문 함수를 사용한 5의 팩토리얼 : 120
재귀함수를 사용한 5의 팩토리얼 : 120
모듈을 사용한 5의 팩토리얼 : 120

12. 군수열

flag = True
sumN = 0
n = 1
nCnt = 1        #n항
searchNC = 0    #분자 값
searchNP = 0    #분모 값


while flag:

    for i in range(1,n+1):
        print(f'{i}/{n-i+1} ',end='')   #분모 분자 --> 분자는 1씩증가, 분모는 역순

        sumN += i/(n-i+1)
        nCnt +=1

        if sumN >100:
            searchNC = i
            searchNP = n-i+1
            flag = False
            break
    print()
    n+=1
print(f'수열의 합이 최초 100을 초과하는 항, 값, 합 : {nCnt}항, 값 : {searchNC}/{searchNP}, \
합 : {round(sumN,2)}')
1/1 
1/2 2/1 
1/3 2/2 3/1 
1/4 2/3 3/2 4/1 
1/5 2/4 3/3 4/2 5/1 
1/6 2/5 3/4 4/3 5/2 6/1 
1/7 2/6 3/5 4/4 5/3 6/2 7/1 
1/8 2/7 3/6 4/5 5/4 6/3 7/2 8/1 
1/9 2/8 3/7 4/6 5/5 6/4 7/3 8/2 9/1 
1/10 2/9 3/8 4/7 5/6 6/5 7/4 8/3 9/2 10/1 
수열의 합이 최초 100을 초과하는 항, 값, 합 : 56항, 값 : 10/1, 합 : 105.81

문제13. 순열

13-1번

num1 = int(input('n 입력 : '))
num2 = int(input('r 입력 : '))

result = 1

for i in range(num1, num1-num2, -1):
    result *= i

print(f'{num1}에서 {num2}개 뽑을 경우의 수 : {result}')
n 입력 : 9
r 입력 : 4
9에서 4개 뽑을 경우의 수 : 3024

13-2번

2,4,7을 한 카드로 보면 5가지 카드이고
5가지 카드 경우의 수와 2,4,7을 나열하는 경우의수를 곱하면 전체 경우의 수
5! * 3!

fNum1 = int(input('factorial 1 입력 : '))
result1 = 1
fNum2 = int(input('factorial 2 입력 : '))
result2 = 1
for n in range(fNum1, 0, -1):
    result1 *= n
print(f'result1 : {result1}')

for n in range(fNum2, 0, -1):
    result2 *= n
print(f'result2 : {result2}')

result = result1 * result2

print(f'모든 경우의 수 : {result}')
factorial 1 입력 : 5
factorial 2 입력 : 3
result1 : 120
result2 : 6
모든 경우의 수 : 720

문제14. 조합

numN = int(input('n 입력: '))
numR = int(input('r 입력: '))

resultP = 1
resultR = 1
resultC = 1

for i in range(numN, numN-numR, -1):
    resultP *= i
for i in range(numR, 0, -1):
    resultR *= i

resultC = resultP / resultR

print(f'resultC : {int(resultC)}')

result = 1/resultC *100
print(f'3,4,5가 선택 될 확률 : {round(result,2)}%')
n 입력: 7
r 입력: 3
resultC : 35
3,4,5가 선택 될 확률 : 2.86%

문제15. 확률


꽝이나 선물을 뽑는 것은 순서에 상관이 없기 때문에 조합을 사용한다.
확률은 사건 / 표본공간 *100 으로 계산한다
이 문제에서는 표본공간은 10장 중 6장을 뽑는 것이고
사건은 6개 꽝중에 꽝3개 뽑는 것과 4개 선물 중 3개 뽑는 것이다.

def Combination():
    numN = int(input('n 입력: '))
    numR = int(input('r 입력: '))

    resultP = 1
    resultR = 1
    resultC = 1

    for i in range(numN, numN-numR, -1):
        resultP *= i
    for i in range(numR, 0, -1):
        resultR *= i
    resultC = resultP / resultR
    return resultC

sample = Combination()
print(f'전체 10장에서 6장 뽑는 경우의 수 : {sample}')

event1 = Combination()
print(f'꽝 6장 중 3장 뽑을 경우의 수 : {int(event1)}')

event2 = Combination()
print(f'선물 4장 중 3장 뽑는 경우의 수 : {int(event2)}')

result = event1 * event2 / sample *100
print(f'10장 중 꽝3장 선물3장 뽑을 확률 : {round(result,2)}%')
n 입력: 10
r 입력: 6
전체 10장에서 6장 뽑는 경우의 수 : 210.0
n 입력: 6
r 입력: 3
꽝 6장 중 3장 뽑을 경우의 수 : 20
n 입력: 4
r 입력: 3
선물 4장 중 3장 뽑는 경우의 수 : 4
10장 중 꽝3장 선물3장 뽑을 확률 : 38.1%
profile
취업공부

0개의 댓글