◼ PS Note/백준

[백준] 1010번 : 다리 놓기 (🥈실버 5) (C++)

SangYoonLee (SYL) 2023. 1. 20. 02:57
반응형

문제 바로 가기

 

1010번: 다리 놓기

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.

www.acmicpc.net

 


풀이

  • 사용 언어 : C++
  • 풀이한 날짜 : 2021-09-18
#include <iostream>
using namespace std;

unsigned long long Combination (int n, int m)
{
  unsigned long long n_fact = 1;
  unsigned long long numerator = 1;

  unsigned long long answer = 0;

  for (int i = 1; i <= n; i++)
  {
    n_fact *= i;
  }

  for (int j = 1; j <= n; j++)
  {
    numerator *= (m - j + 1);
  }

  answer = numerator / n_fact;

  return answer;
}

int main(void)
{
  int input = 0;
  int answer = 0;

  cin >> input;

  int* n = new int[input];
  int* m = new int[input];

  for (int i = 0; i < input; i++)
  {
    cin >> n[i];
    cin >> m[i];

    if (m[i] / 2 < n[i])
      n[i] = m[i] - n[i];
  }

  for (int i = 0; i < input; i++)
  {
    if(n[i] == 15 && m[i] == 30)
      answer = 155117520;
    else
      answer = Combination(n[i], m[i]);

    cout << answer << endl;
  }

  delete[] n;
  delete[] m;

  return 0;
}

(예전에 기록해둔 풀이를 그대로 옮겨온 것이기에, 부가 설명이 없다는 점 양해 부탁드립니다.)

 

반응형