본문 바로가기
제로베이스 데이터 스쿨/일일 스터디 노트

12일차 스터디노트 / 기초수학 순열, 조합, 확률, 연습문제 풀이 + 파이썬 / 제로베이스 데이터 취업 스쿨

by 김뎀뎀 2023. 1. 16.

📗 12일차 공부 내용 요약

[ 기초수학과 파이썬 ]

1.순열 : 순열에 대해 알아보고, 파이썬으로 구현해보았다.

2.조합 : 조합에 대해 알아보고, 파이썬으로 구현해보았다.

3.확률 : 조합을 활용해 확률을 구해보고, 파이썬으로 구현해보았다.

4.기초수학 연습문제 풀이 : 지금까지 배운 기초수학에 대한 파이썬 연습문제를 풀었다.

 


📖  12일차 공부 내용 자세히

1. 순열

  • 순열은 n개에서 r개를 택하여 나열하는 경우의 수이다.
  • 순열은 순서를 고려해서 택한다

 

 

순열 : nPr 구하기
numN = int(input('numN 입력 : '))
numR = int(input('numR 입력 : '))

result = 1

for n in range(numN, (numN-numR), -1):
    print('n : {}'.format(n))
    result *= n

print('result : {}'.format(result))

 

2. 조합

  • 조합은 n개에서 r개를 택하는 경우의 수이다
  • 조합은 순서에 상관없이 택한다

 

 

조합 : nCr 구하기
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))

resultP = 1 #순열의 결과
resultR = 1 #R!의 결과
resultC = 1 #조합의 결과

for n in range(numN, (numN - numR), -1):
    print('n : {}'.format(n))
    resultP *= n

print('resultP : {}'.format(resultP))

for n in range(numR, 0, -1):
    print('n : {}'.format(n))
    resultR *= n

print('resultR : {}'.format(resultR))

resultC = int(resultP / resultR)
print('resultC: {}'.format(resultC))

 

3.확률

  • 확률은 모든 사건에서 특정 사건이 일어날 수 있는 수를 나타낸 것이다.
#박스에 꽝이 적힌 종이가 4장 있고, 선물이 적힌 종이가 3장 있을 때
#파이썬을 이용해서 꽝 2장과 선물 1장을 뽑는 확률을 출력하자

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

resultP = 1 #순열의 결과
resultR = 1 #R!의 결과
resultC = 1 #조합의 결과

for n in range(numN, (numN - numR), -1):
    print('n : {}'.format(n))
    resultP *= n

print('resultP : {}'.format(resultP))

for n in range(numR, 0, -1):
    print('n : {}'.format(n))
    resultR *= n

print('resultR : {}'.format(resultR))

resultC = int(resultP / resultR)
print('resultC: {}'.format(resultC))

 

4.기초수학 연습문제 풀이

다음 수열을 보고, 수열의 합이 최초 100을 초과하는 n번째 항의 값과 n을 출력하는 프로그램을 만들어보자

1/1 ,  1/2,  2/1,  1/3,  2/2,  3/1,  1/4,  2/3,  3/2,  4/1,  1/5,  2/4, ...
flag = True
n = 1
nCnt = 1; searchNC = 0; searchNP = 0
sumN = 0
while flag:

    for i in range(1, (n + 1)):
        if i == n:
            print('{}/{} '.format(i, (n - i + 1)), end='')
        else:
            print('{}/{}, '.format(i, (n - i + 1)), end='')

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

        nCnt += 1
        if (sumN > 100):
            searchNC = i
            searchNP = n - i + 1
            flag = False
            break

    print()
    n += 1

print('수열의 합이 최초 100을 초과하는 항, 값, 합: {}항, {}/{}, {}'.format(nCnt, searchNC, searchNP, sumN))

➰ 12일차 후기

 

기초수학을 통해 배운 개념들을 math모듈을 통해 손쉽게 활용할 수 있겠지만,

지금 이렇게 작성해보는 코드들이 나중에 도움이 되겠지?! 라는 생각을 가지려 해봤던 시간이었다.

쉬운 코드들도 잇었지만, 머리를 써야하는 코드들도 있어서 시간이 지나면 가물가물 해질 것 같으니 나중에 또 살펴봐야겠다.

 

※본 내용은 제로베이스 데이터 취업 스쿨에서 제공하는 학습 내용에 기반합니다.