-
개발자를 위한 수학 마스터 4회차: 순열과 조합 - 패스워드부터 알고리즘까지[프로그램]/Maths 2025. 9. 23. 14:50728x90

"사용자 패스워드 정책을 어떻게 설계하면 안전할까요? 수학이 답을 알려드립니다!"
*"함수형 프로그래밍 적용해봤는데 코드가 정말 깔끔해졌어요!"
*"순수함수로 바꾸니까 테스트 코드 작성이 훨씬 쉬워지더라고요."*
*"부수효과 분리하니까 디버깅할 때 어디서 문제인지 바로 찾을 수 있어요."지난주 3회차에서는 함수의 수학적 원리를 다뤘습니다. 이번 회차에서는 순열과 조합을 실무적 관점에서 정리합니다.
"고등학교 때 배운 nPr, nCr 아닌가?" 하실 수 있지만, 실제로는 패스워드 보안, 알고리즘 최적화, 코딩 테스트에서 매일 쓰입니다.
실무에서 마주치는 순열과 조합 문제들
🔐 보안팀 요청 사례
- 보안팀: "8자리 영문+숫자 조합 패스워드는 얼마나 안전한가요?"
- 개발팀: "대충 많이 안전할 것 같은데요...? 🤔"
이때 순열 계산을 모르면 "감"으로만 대답할 수밖에 없습니다.
⚡ 알고리즘 최적화
// 5명 중 3명을 뽑는 모든 조합 for (let i = 0; i < players.length; i++) { for (let j = i + 1; j < players.length; j++) { for (let k = j + 1; k < players.length; k++) { teams.push([players[i], players[j], players[k]]); } } }선수가 5명일 때는 괜찮지만, 50명이 되면?
→ 조합 공식을 알면 성능 한계를 쉽게 예측할 수 있습니다.
순열(Permutation) vs 조합(Combination)
- 순서가 중요하다 → 순열
- 순서가 중요하지 않다 → 조합
상황 순서 중요도 타입 실무 활용 패스워드 생성 (ABC123 vs 123ABC) 중요 순열 보안 정책 팀원 선발 (김철수, 이영희 vs 이영희, 김철수) 중요하지 않음 조합 리소스 할당 API 엔드포인트 (/users/1/posts vs /posts/users/1) 중요 순열 라우팅 기능 선택 (결제+배송 vs 배송+결제) 중요하지 않음 조합 기능 테스트
수학 공식을 코드로 구현하기
📐 순열 공식

function permutation(n, r) { if (r > n || r < 0) return 0; let result = 1; for (let i = n; i > n - r; i--) result *= i; return result; } console.log(permutation(5, 3)); // 60📐 조합 공식

function combination(n, r) { if (r > n || r < 0) return 0; r = Math.min(r, n - r); let result = 1; for (let i = 0; i < r; i++) result = result * (n - i) / (i + 1); return Math.round(result); } console.log(combination(5, 3)); // 10
🔧 인터랙티브 데모 체험하기
- 패스워드 보안 강도 계산
- 조합 생성 시뮬레이터
- 브루트포스 공격 시간 예측
- 단계별 시각화
실무 활용 예시
- 패스워드 보안 강도 추정
estimateCrackingTime(8, 62)→ 몇 시간estimateCrackingTime(10, 94)→ 수백만 년
- 테스트 케이스 생성 최적화
- n개 기능 중 r개 조합 테스트 가능
- 알고리즘 복잡도 예측
- C(10, 3) = 120 → 빠름
- C(20, 10) = 184,756 → 느림
- C(30, 15) = 155,117,520 → 매우 느림
최적화 & 주의사항
- 큰 수 계산 시 BigInt 필요
function bigCombination(n, r) { if (r > n - r) r = n - r; let result = 1n; for (let i = 0; i < r; i++) { result = result * BigInt(n - i) / BigInt(i + 1); } return result; }
정리
- 순열/조합 판단 핵심: "순서가 중요한가?"
- 보안 정책: 문자 집합과 길이의 지수적 관계
- 알고리즘 성능: 조합 수 계산으로 예측 가능
- 최적화: 불필요한 팩토리얼 제거
다음 예고
5회차: "점화식과 동적 프로그래밍 - 피보나치부터 최적화까지"
- 점화식으로 복잡도 분석
- DP 원리 & 메모이제이션
- 캐시 전략, DB 쿼리 최적화 실습
728x90