일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 코딩테스트
- KT
- it 뉴스
- python
- 인앱결제
- 카카오
- IT 트렌드
- IT 동향
- SSAFYcial
- 우테코
- 싸피
- Java
- 백준
- 코테
- it 이슈
- 신문 스크랩
- 네트워크 관리사 2급 실기
- 싸피셜
- 구글
- SSAFY 7기
- 코딩테스트 연습
- 네트워크 관리사
- 백준위
- 프로그래머스
- 리얼클래스
- html
- 신문스크랩
- java 객체지향 프로그래밍
- 네트워크 관리사 2급
- SSAFY
Archives
- Today
- Total
개발자일걸요..?
1010번 다리놓기 본문
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