발효홍삼
코딩하는 홍삼
발효홍삼
전체 방문자
오늘
어제
  • 분류 전체보기 (142)
    • PS (63)
      • 프로그래머스 (9)
      • 코드업 (10)
      • 백준 (43)
      • 알고스팟 (1)
    • Programming Language (11)
      • html_css (2)
      • java (0)
      • c,c++ (2)
      • vanillajs (2)
      • react (0)
      • vue.js (0)
      • angular.js (0)
      • electron (3)
      • 엄랭(Umjunsik-lang) (1)
      • F# (1)
      • Node.js (0)
      • Go (0)
    • knowledge (41)
      • algorithm (3)
      • data structure (1)
      • os (1)
      • ML (1)
      • math (31)
      • paper review (0)
      • IT-license (4)
    • Programming Guide (27)
      • React (1)
      • Electron (2)
      • CSS , SASS ( SCSS ) , Tailw.. (3)
      • Node.js (1)
      • Go (1)
      • Ruby on Rails (2)
      • R (1)
      • PHP (1)
      • Docker (1)
      • JSP (1)
      • C# (1)
      • Django (1)
      • Flask (1)
      • Dart (1)
      • Next.js (1)
      • Vue.js (1)
      • Unity (1)
      • React Native (0)
      • Flutter (3)
      • GraphQL (1)
      • MongoDB (1)
      • .NET (1)
      • RUST (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 기초100제
  • 정보처리기능사
  • 정보처리기능사 필기
  • 자바
  • 코드업
  • codeup
  • 이산수학
  • cpp
  • 파이썬
  • 프로그래머스
  • 미분
  • CSS
  • c++
  • JavaScript
  • 미적분학
  • 구현
  • 알고리즘
  • Python
  • 수학
  • HTML
  • LV1
  • electron
  • 출력
  • java
  • C
  • nodejs
  • js
  • 백준
  • 기초백제
  • 적분

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
발효홍삼

코딩하는 홍삼

[ 백준 ] 1010번 : 다리놓기 - (C++/C , JAVA/자바 , PYTHON/파이썬 , Node.JS/자바스크립트 )
PS/백준

[ 백준 ] 1010번 : 다리놓기 - (C++/C , JAVA/자바 , PYTHON/파이썬 , Node.JS/자바스크립트 )

2022. 3. 3. 03:20
728x90
  • 문제

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

 

1010번: 다리 놓기

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

www.acmicpc.net


  • 풀이법 ( 알고리즘 )

문제를 보자마자 직감적으로 nCr 공식이 떠올랐다.

m개 중에서 n개를 순서에 상관없이 고르는 것이므로 조합을 사용할 수 있다.

파스칼의 삼각형을 응용하여 풀었다.


  • 풀이 - C++ ( C )
#include <iostream>

using namespace std;

int T, n, m; // T : 테스트 케이스의 개수 , n : 서쪽 사이트의 개수, m : 동쪽 사이트의 개수
long long dp[31][31]; // dp[x][y] : nCr의 값을 dp[n][r]에 저장

long long solution(int m, int n) {
	if (dp[m][n]) return dp[m][n]; // 이미 값을 구했다면 return
	if (n == m || n == 0) return 1; //서로 같거나 n이 0이라면 return
	
	dp[m][n] = solution(m - 1, n - 1) + solution(m - 1, n); // 파스칼의 삼각형 이론 : nCr = (n - 1)C(r - 1) + (n - 1)Cr
	return dp[m][n]; //위에서 구한 dp[m][n]을 return
}

int main(void)
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	//input & solve & output

	cin >> T; // 테스트케이스 입력
	while (T--)
	{
		cin >> n >> m;
		cout << solution(m,n) << "\n";
	}

	return 0;
}
  • 풀이 - JAVA
import java.util.Scanner;

public class Main {
	static int[][] dp = new int[30][30];
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int t = sc.nextInt();
		
		for(int i = 0; i < t; i++)
		{
			int n = sc.nextInt();
			int m = sc.nextInt();
			
			System.out.println(combi(m,n));
		}
	}
	
	static int combi(int m, int n) {
		if(dp[m][n] > 0) return dp[m][n];
		if(n == m || n == 0) return 1;
		
		dp[m][n] = combi(m-1,n-1) + combi(m-1,n);
		return dp[m][n];
	}
}
  • 풀이 - PYTHON
import math
t = int(input())

def combination(n,m):
    return int(math.factorial(m) / (math.factorial(n) * math.factorial(m-n)))

for _ in range(t):
    n , m = map(int, input().split())
    print(combination(n,m))
  • 풀이 - Node.js
const fs = require('fs');
const stdin = fs.readFileSync('/dev/stdin').toString().split('\n');

let testNum = stdin[0];

for(let i = 1; i <= testNum; i++)
{
    let str = stdin[i].split(" ");
    let n = parseInt(str[0]);
    let m = parseInt(str[1]);

    let dp = [];
    for (let i = 0; i < m+1; i++) {
        let a = new Array(n+1).fill(0);
        dp.push(a);
    }


    function combi(m,n){
        if(dp[m][n] > 0) return dp[m][n];
        if(n == m || n == 0) return 1;
    
        dp[m][n] = combi(m-1,n-1) + combi(m-1,n);
        return dp[m][n];
    }
    

    console.log(combi(m,n));
}
728x90
저작자표시 비영리 (새창열림)

'PS > 백준' 카테고리의 다른 글

[ 백준 ] 11723번 : 집합 - ( C++ / C )  (0) 2022.03.05
[ 백준 ] 10026번 : 적록색약 - ( C++/C )  (0) 2022.03.05
[ 백준 ] 5585번 : 거스름돈 - ( C++/C , JAVA/자바, PYTHON/파이썬, NODE.JS/자바스크립트 )  (0) 2022.03.01
[ 백준 ] 1026번 : 보물 - (C++/C, JAVA/자바, PYTHON/파이썬)  (0) 2022.02.28
[ 백준 ] 6603번 : 로또 - ( C++ / C , JAVA/자바, PYTHON/파이썬 )  (0) 2022.02.27
    'PS/백준' 카테고리의 다른 글
    • [ 백준 ] 11723번 : 집합 - ( C++ / C )
    • [ 백준 ] 10026번 : 적록색약 - ( C++/C )
    • [ 백준 ] 5585번 : 거스름돈 - ( C++/C , JAVA/자바, PYTHON/파이썬, NODE.JS/자바스크립트 )
    • [ 백준 ] 1026번 : 보물 - (C++/C, JAVA/자바, PYTHON/파이썬)
    발효홍삼
    발효홍삼
    코딩하는 홍삼

    티스토리툴바