개발자일걸요..?

1010번 다리놓기 본문

알고리즘코딩/Baekjoon Online Judge

1010번 다리놓기

Re_A 2021. 2. 16. 13:58
728x90
반응형

문제링크 : www.acmicpc.net/problem/1010

 

1010번: 다리 놓기

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

www.acmicpc.net

 

<문제풀이 접근법>

 1) 최대로 다리를 지을 수 있어야 함으로 N개의 사이트에는 모두 다리가 지어져야한다.

 2) 다리끼리 겹칠 수 없기 때문에 순서를 고려하지 않는 경우의 수로 구해야한다. 

   => MCN 방법(조합) 이용

        우측에 있는 M개의 사이트 중 N개를 고르고 좌측의 N개의 사이트에 위에서 부터 순서대로 연결한다.

 

 

방법 1. 파스칼 삼각형 이용( 메모리 : 28776KB  시간 : 112ms)

import sys
T = int(sys.stdin.readline())
for _ in range(T):
    N,M = map(int, sys.stdin.readline().split())
    fascal = [[1 for _ in range(M+1)]for _ in range(M+1)]
    for i in range(0,M+1):
        for j in range(0,i+1):
            if((i==j) | (j==0)):
                fascal[i][j] = 1
            else:
                fascal[i][j] = fascal[i-1][j-1]+fascal[i-1][j]
    print(fascal[M][N])

 

방법 2. for문을 통해 MPN/N!이용( 메모리 : 28776KB  시간 : 64ms)

import sys
T = int(sys.stdin.readline())
for _ in range(T):
    N,M= map(int,sys.stdin.readline().split())
    total =1
    if(N!=M):
        for i in range(M,M-N,-1):
            total*=i
        for j in range(N,1,-1):
            total//=j
    print(total)
반응형

'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글

11047번 동전0  (0) 2021.02.19
9375번 패션왕 신해빈  (0) 2021.02.16
2004번 조합 0의 개수  (0) 2021.02.15
1676번 팩토리얼 0의 개수  (0) 2021.02.15
11051번 이항계수2  (0) 2021.02.14
Comments