[서론]
최근 문제 풀이 실력이 늘지 않아. 지금까지 풀지 않았던 문제를 풀어보는 중이다.
오늘 0단계 문제 중 구슬을 나누는 경우의 수를 풀다가 반올림을 해줄 필요성을 느껴 찾아본 결과
Math.Round() 라는 반올림을 해주는 매서드를 처음 알게되었다. 그래서 이렇게 기록을 남긴다.
1. 문제설명
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
2. 제한사항
● 1 ≤ balls ≤ 30
● 1 ≤ share ≤ 30
● 구슬을 고르는 순서는 고려하지 않습니다.
● share ≤ balls
3. 입출력 예시
balls share return 3 2 3 5 3 10
4. 나의풀이
- 이 문제는 친절히 로직을 제공해주었다.
- 1차시도(실패)
: 공식과 똑같은 코드를 만들었는데도 실패하는 테스트케이스가 나왔다. 이 때 완전 정수로 나눠지지 않는 경우도 있겠다는 생각을 했다. - 2차시도(성공)
: balls의 최대 개수는 30개. 뭔가 int의 범위안에 안들어올 것 같아서 계산기를 돌렸고, 예상이 맞아서 long으로 받았다가 정수가 아닌 경우를 생각하여 double로 바꿨다. 하지만 원하는 값이 경우의 수이며, 이는 소수는 아닐 것 같아서 반올림을 해주는 매서드를 찾아봤고, 이 때 Math.Round를 알게되었다.
public double solution(int balls, int share)
{
// 분모가 0이면 경우의 수는 1.
if (balls == share)
return 1;
// 공식. Math.Round => 반올림 매서드. 정수로 만들어주기 위함.
double answer = Math.Round(Factorial(balls) / (Factorial(balls - share) * Factorial(share)));
return answer;
}
// 팩토리얼 기능의 함수.
double Factorial(int _num)
{
double n = 1;
for (double i = _num; i > 0; i--)
{
n *= i;
}
return n;
}
'C# > 프로그래머스 코딩 문제 풀이' 카테고리의 다른 글
[프로그래머스 C#] Lv.0 문제 4/5 완료. (0) | 2024.06.14 |
---|---|
[프로그래머스 C#] Lv.0 문제 3/5 풀이 완료 (0) | 2024.06.10 |
[프로그래머스 C#] Lv.2 롤케이크 자르기 (0) | 2024.06.05 |
[프로그래머스 C#] Lv.2 뒤에 있는 큰 수 찾기 (0) | 2024.06.03 |
[프로그래머스 C#] Lv.2 n^2 배열 자르기 (0) | 2024.05.30 |