[백준] 1010번: 다리 놓기

2024. 10. 23. 20:41·PS

 

 


 

문제

https://www.acmicpc.net/problem/1010

 

 

개념

수학(조합), 다이나믹 프로그래밍

 

 

실행 결과

 

 

 

 

구현 코드(c++)

#include <iostream>
using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);

  int t;
  cin >> t;

  while (t--) {
    int n, m;
    cin >> n >> m;
    unsigned long long res = 1;
    for (int i = 0; i < n; i++) {
      res *= (m - i);
      res /= (i + 1);
    }
    cout << res << endl;
  }
}

 

 

 

 

코드 설명

단순히 조합 mCn을 계산하는 문제이다.

처음에는 공식을 사용하여 단순 계산식을 만들었으나 시간 초과로 실패하거나 메모리 에러가 발생했다.

출처: 코딩팩토리(https://coding-factory.tistory.com/606#google_vignette)

문제에서 m이 n보다 항상 크다고 주어지므로 공식의 n을 m으로, r을 n으로 두었다.

여기서 시간복잡도를 줄이려면 중복 연산을 없애면 된다. m!과 m-n!은 계산 과정에서 반드시 약분되기 때문이다. 

 

 

m=7, n=3이라고 했을때 다음과 같은 규칙이 나온다.

이를 바탕으로 세운 식은 다음과 같다. 

for (int i = 0; i < n; i++) {
  res *= (m - i);
  res /= (i + 1);
}

 

분자 부분은 곱해주고 분모 부분은 나눠주면 한 번에 계산할 수 있다.

또한 결국 조합 문제이기 때문에, DP로도 풀 수 있다. 하지만 위 방법이 훨씬 간단하다..!

 

 

 


 

저작자표시 (새창열림)

'PS' 카테고리의 다른 글

[백준] 2667번: 단지번호붙이기  (0) 2024.12.13
[코드트리] 제곱수의 합으로 나타내기  (0) 2024.12.08
[백준] Fly me to the Alpha Centauri  (0) 2024.10.17
[프로그래머스] 타겟 넘버  (0) 2024.10.12
[프로그래머스] 문자열 여러 번 뒤집기  (0) 2024.10.10
'PS' 카테고리의 다른 글
  • [백준] 2667번: 단지번호붙이기
  • [코드트리] 제곱수의 합으로 나타내기
  • [백준] Fly me to the Alpha Centauri
  • [프로그래머스] 타겟 넘버
abyss-s
abyss-s
프론트엔드 개발합니다!
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Web (16)
        • JavaScript (6)
        • TypeScript (1)
        • React (5)
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (13)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (3)
        • LG U+ URECA (4)
        • Project (2)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • IT (4)
      • Statistics (11)
      • Book (4)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 백준
    • 트위터
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    운영체제
    C++
    BFS
    그리디
    통계학
    github
    네트워크
    BAEKJOON
    DP
    JavaScript
    자바기반응용프로그래밍
    파이썬
    Java
    Python
    React
    자바스크립트
    백준
    코드트리
    OS
    생활코딩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
abyss-s
[백준] 1010번: 다리 놓기
상단으로

티스토리툴바