[프로그래머스 / C++] 구슬을 나누는 경우의 수

YH·2023년 7월 13일
0

문제

구슬을 나누는 경우의 수 : 문제 링크


문제 분석

  • 구슬의 개수 balls와 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return
  • 서로 다른 n개 중 m개를 뽑는 조합 공식을 활용
  • answer을 int로 할 경우, balls가 30, share가 15일 경우 오버플로우가 발생하므로, long으로 설정
  • 런타임 에러 방지를 위해 곱하고, 나누는 과정을 for문 하나에서 수행
  • 삼항 연산자를 사용하여, for문 수행 횟수를 balls와 (balls - share) 값중에 더 작은수를 채택

풀이

#include <string>
#include <vector>

using namespace std;

int solution(int balls, int share) {
    long answer = 1;
    int a = (balls - share < share) ? balls - share : share;
    
    for(int i = 0; i < a; i++) {
        answer *= (balls - i);
        answer /= (i + 1);
    }
    
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글