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

[강의 요약]

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

25_순열부터 30_확률(파이썬)까지 강의 수강하였음

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

 

 

 

 

[순열]

▶ 순열이란?

n개 중 r개를 순서 있게 나열하는 경우의 수를 말한다.

기호로는 nPr

# 공식은 다음과 같다.
nPr = n × (n - 1) × (n - 2) × ... × (n - r + 1)
    = n! / (n - r)!

 

예시는 다음과 같다.

8P3 = 8 × 7 × 6 = 336

7P5 = 7 × 6 × 5 × 4 × 3 = 2520

 

 

▶ 원순열이란?

원형 테이블처럼 시작과 끝이 구분되지 않는 경우의 순열을 말한다.

원순열 공식 : n개 원형 순열 = (n - 1)!

 

예시는 다음과 같다.

4명을 원형 테이블에 앉히는 경우의 수 : (4 - 1)! = 3! = 6

 

 

 

 

[순열_파이썬]

파이썬에서는 math.factorial()을 활용해 간단히 구현 가능하다.

순열은 조합과 함께 코딩 테스트에서 자주 등장한다.

 

▶ 코드 : 순열 값 계산

import math

n = int(input("n을 입력하세요: "))
r = int(input("r을 입력하세요: "))

nPr = math.factorial(n) // math.factorial(n - r)
print(f"{n}P{r} = {nPr}")

★ 출력 결과 ★

n을 입력하세요: 8
r을 입력하세요: 3
8P3 = 336

 

 

▶ 코드 : 원순열 계산

n = int(input("원순열에 참여할 인원 수: "))

if n < 1:
    print("1명 이상이어야 합니다.")
else:
    result = math.factorial(n - 1)
    print(f"{n}명을 원형으로 배치하는 경우의 수: {result}")

★ 출력 결과 ★

원순열에 참여할 인원 수: 4
4명을 원형으로 배치하는 경우의 수: 6

 

 

 

 

[조합]

▶ 조합이란?

n개 중에서 r개를 순서 없이 선택하는 경우의 수를 말한다.

순열과 달리 순서가 중요하지 않다.

 

순열과 조합의 차이는 무엇일까?

구분 순열(Permutation) 조합(Combination)
의미 순서 있게 선택 순서 없이 선택
기호 nPr nCr
공식 n! / (n - r)! n! / [r! x (n - r)!]

 

조합 계산 예시는 다음과 같다.

8C3 = 8! / (3! × 5!) = 56

7C5 = 7! / (5! × 2!) = 21

 

조합은 순열보다 결과 수가 적거나 같다. (중복 제거 된다)

 

 

▶ 문제 예시

카드 5장 중에서 2장을 고를 때, 삼각형과 사각형이 동시에 나올 확률은?

전체 조함 : 5C2 = 10

삼각형 + 사각형만 골라지는 경우 : 1가지

→ 확률 : 1/10 = 10%

 

 

 

 

[조합_파이썬]

파이썬에서는 math.factorial()을 이용해 손쉽게 구현 가능하다.

확률 문제, 경우의 수 문제 등에서 조합 개념은 자주 쓰인다.

▶ 코드 : 조합 계산

import math

n = int(input("n을 입력하세요: "))
r = int(input("r을 입력하세요: "))

if r > n:
    print("r은 n보다 작거나 같아야 합니다.")
else:
    nCr = math.factorial(n) // (math.factorial(r) * math.factorial(n - r))
    print(f"{n}C{r} = {nCr}")

★ 출력 결과 ★

n을 입력하세요: 8
r을 입력하세요: 3
8C3 = 56

 

 

 

 

[확률]

▶ 확률이란?

모든 가능한 경우 중에서 특정 사건이 일어날 확률을 말한다.

 

공식은 다음과 같다.

확률 = 특정 사건이 발생할 경우의 수 / 전체 경우의 수

 

▶ 문제 예시 : 기본 확률

  • 동전 던지기
    • 표본공간: 앞면, 뒷면 → 2가지
    • 사건: 앞면 → 1가지
    • 확률: 1/2 = 0.5

 

  • 주사위 던지기
    • 표본공간: 1~6 → 6가지
    • 사건: 3 → 1가지
    • 확률: 1/6 ≈ 0.167

 

 

▶ 문제 예시 : 기본 확률

박스에 꽝 4장, 선물 3장 있다.
여기서 3장을 뽑을 때, 아래의 확률을 계산

전체 경우의 수 = 7C3 = 35

뽑기 조합 계산식 확률
꽝 1 + 선물 2 4C1 × 3C2 / 35 4 × 3 / 35 = 12/35
꽝 2 + 선물 1 4C2 × 3C1 / 35 6 × 3 / 35 = 18/35
꽝 3 + 선물 0 4C3 × 3C0 / 35 4 × 1 / 35 = 4/35

 

 

 

 

[확률_파이썬]

파이썬에서는 math.comb()를 활용하면 조합 계산이 간편하다.

▶ 코드 : 확률 계산

import math

# 조합 함수
def comb(n, r):
    return math.comb(n, r)

total = comb(7, 3)  # 전체 경우의 수

# 예: 꽝 2, 선물 1
success = comb(4, 2) * comb(3, 1)
prob = success / total

print(f"성공 확률: {prob:.4f} ({prob*100:.2f}%)")

★ 출력 결과 ★

성공 확률: 0.5143 (51.43%)

 

 

 

 

[나의 생각 정리]

경우의 수와 확률에 대한 이론적인 부분을 확실하게 숙지를 해야 나중에 코테 문제에서 구현할 수 있다고 생각한다.

적어도 공식은 누가 물어도 대답할 수 있을 정도로 기억해야 하고 어떤 상황에서 사용하는지 또한 알아야 한다.

백지상태로 파이썬 코드로 구현하는 연습을 하면 좋을 것 같다.

 

 

[적용점]

코딩테스트 문제에서도 경우의 수와 확률 문제는 내가 약한 부분이므로 많이 풀어보면 좋을 것 같다.

문제를 접했을 때 '확률'문제인지, '경우의 수'로 바꿀 수 있는지 판단할 수 있는 시야를 키우면 좋다.

 

 

 

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