제로베이스 데이터 취업 파트타임/100일 챌린지_일일 학습 일지

제로베이스 데이터 파트타임 스쿨 학습 일지 [25.04.18]

김뚱입니다 2025. 4. 18. 07:53

[강의 요약]

[Part 02. 수학_Ch 01. 기초 수학] 강의 수강

42_[연습문제] 군 수열부터 45_[연습문제] 확률까지 강의 수강하였음

🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰░                                          ] 33/100일 (33%)

 

 

 

 

[연습문제_군 수열]

군수열은 수열을 '특정 규칙에 따라 묶음(군)'으로 나누어 나열한 수열이다.

▶ 코드

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))
  • 군수열은 항들을 군 단위로 묶어 구조화된 수열
  • 각 n번째 군은 n개의 항으로 구성됨
  • 각 항의 형태는 i / (n - i + 1)
  • 수열을 누적하면서 합이 100을 초과하는 지점을 탐색
  • 합이 특정 값을 넘는 조건을 만족하는 항을 반복문과 조건문으로 탐색

★ 출력 결과 ★

1/1 
1/2, 2/1 
1/3, 2/2, 3/1 
...
수열의 합이 최초 100을 초과하는 항, 값, 합: 142항, 11/1, 100.509...

 

 

 

[연습문제_순열]

순열은 n개의 항목 중 r개를 순서 있게 나열하는 경우의 수

순열 공식

▶ 코드 1 

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))

★ 출력 결과 ★

numN 입력: 9
numR 입력: 4
n : 9
n : 8
n : 7
n : 6
result: 3024

 

 

▶ 코드 2

fNum1 = int(input('factorial1: '))
result1 = 1
for n in range(fNum1, 0, -1):
    result1 *= n
print('result1: {}'.format(result1))

fNum2 = int(input('factorial2: '))
result2 = 1
for n in range(fNum2, 0, -1):
    result2 *= n
print('result2: {}'.format(result2))

print('모든 경우의 수: {}'.format(result1 * result2))

★ 출력 결과 ★

factorial1: 4
result1: 24

factorial2: 3
result2: 6

모든 경우의 수: 144

 

 

▶ 코드 3

코드 2를 math.factorial()을 이용해서 푼 코드

import math

result1 = math.factorial(fNum1)
result2 = math.factorial(fNum2)
print('모든 경우의 수: {}'.format(result1 * result2))

★ 출력 결과 ★

모든 경우의 수: 144

 

 

 

[연습문제_조합]

조합은 n개 중에서 순서 없이 r개를 선택하는 경우의 수

조합 공식

▶ 코드 

import math

# 첫 번째 조합: 9C4
n1 = 9
r1 = 4
result1 = math.comb(n1, r1)
print(f'{n1}C{r1} = {result1}')

# 두 번째 조합: 6C2
n2 = 6
r2 = 2
result2 = math.comb(n2, r2)
print(f'{n2}C{r2} = {result2}')

★ 출력 결과 ★

9C4 = 126
6C2 = 15

 

 

▶ 코드 

  • 전체 카드 : {1, 2, 3, 4, 5, 6, 7}
  • 총 조합 수 = 7C3 = 35
  • 3, 4, 5가 동시에 선택될 수 있는 경우는 단 1가지임

확률

import math

total_cases = math.comb(7, 3)  # 전체 조합 수
success_cases = 1              # 3,4,5 동시에 선택되는 경우

probability = success_cases / total_cases * 100
print(f'확률: {round(probability, 2)}%')

★ 출력 결과 ★

확률: 2.86%

 

 

 

[연습문제_확률]

확률은 특정 사건이 일어날 수 있는 수를 찾는 것

▶ 코드

def proFun():
    numN = int(input('numN 입력: '))  # 전체 수
    numR = int(input('numR 입력: '))  # 선택할 수
    resultP = 1
    resultR = 1

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

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

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

    return resultC

# 전체 경우의 수: 10장에서 6장 뽑기
sample = proFun()
print('sample: {}'.format(sample))

# 사건1: 꽝 6장에서 3장 뽑기
event1 = proFun()
print('event1: {}'.format(event1))

# 사건2: 선물 4장에서 3장 뽑기
event2 = proFun()
print('event2: {}'.format(event2))

# 확률 계산
probability = (event1 * event2) / sample
print('probability: {}%'.format(round(probability * 100, 2)))
  • 전체 경우의 수 = 10C6 = 210
  • 사건 1 = 6C3 = 20
  • 사건 2 = 4C3 = 4
  • 성공 경우의 수 = 20 × 4 = 80
  • 확률 = (80 / 210) × 100 ≈ 38.1%

★ 출력 결과 ★

numN 입력: 10
numR 입력: 6
resultP: 151200
resultR: 720
resultC: 210
sample: 210

numN 입력: 6
numR 입력: 3
resultP: 120
resultR: 6
resultC: 20
event1: 20

numN 입력: 4
numR 입력: 3
resultP: 24
resultR: 6
resultC: 4
event2: 4

probability: 38.1%

 

 

 

[나의 생각 정리]

알고 있던 이론적인 내용(공식)을 파이썬 코드로 구현하면서 복습할 수 있었다.

그리고 수식으로 수학 계산하는 것보다 코드로 구현하려니까 훨씬 어렵다.

코테에서 이런 문제를 많이 물어볼 텐데 아직 바로바로 작성할 자신이 없음 ㅠ

 

 

[적용점]

코딩테스트 문제에서 자주 보이는 유형들

 

 

 

“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”