일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 카카오
- 신문 스크랩
- 네트워크 관리사 2급
- 코테
- Java
- 우테코
- 코딩테스트
- 구글
- IT 트렌드
- 백준위
- 코딩테스트 연습
- IT 동향
- 싸피셜
- 인앱결제
- it 이슈
- python
- 네트워크 관리사
- 프로그래머스
- it 뉴스
- 네트워크 관리사 2급 실기
- java 객체지향 프로그래밍
- 백준
- 리얼클래스
- SSAFY 7기
- SSAFY
- 신문스크랩
- html
- SSAFYcial
- 싸피
- KT
- Today
- Total
개발자일걸요..?
11051번 이항계수2 본문
문제링크 : www.acmicpc.net/problem/11051
11051번: 이항 계수 2
첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\))
www.acmicpc.net
<문제 풀이 근거>
1) 파스칼 삼각형 이용
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
=> pascal[i][j] = pascal[i-1][j-1]+pascal[i-1][j]
2) 모듈러 연산 속성 이용
( a + b ) % M = ( ( a % M ) + ( b % M ) ) % M
<알고리즘>
1) 주어진 N번째 열까지 파스칼 삼각형을 구한다.
2) 이때 수가 int 범위를 초과하는 경우를 고려하여 모듈러 연산을 이용해 10007의 나머지로 계산한다.
3) N행의 K번째 값을 출력한다.
방법1. Scanner 입력 이용 ( 메모리 : 16820KB 시간 : 128ms )
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
int num[][] = new int[N+1][N+1];
for(int i =0;i<N+1;i++) {
for(int j =0;j<=i;j++) {
if((j==0)||(j==i)){
num[i][j]=1;
}
else {
num[i][j] = (num[i-1][j]%10007+num[i-1][j-1]%10007)%10007;
}
}
}
System.out.println(num[N][K]%10007);
}
}
방법2. BufferedReader을 이용한 입력 ( 메모리 : 15596KB 시간 : 96ms)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s= "";
try {
s= bf.readLine();
}catch(IOException e) {}
StringTokenizer st = new StringTokenizer(s);
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int num[][] = new int[N+1][N+1];
for(int i =0;i<N+1;i++) {
for(int j =0;j<=i;j++) {
if(j==0||j==i) {
num[i][j] = 1;
}
else {
num[i][j] = (num[i-1][j-1]%10007+num[i-1][j]%10007)%10007;
}
}
}
System.out.println(num[N][K]);
}
}
+) 참고
1) 파스칼 삼각형 : ko.wikipedia.org/wiki/%ED%8C%8C%EC%8A%A4%EC%B9%BC%EC%9D%98_%EC%82%BC%EA%B0%81%ED%98%95
파스칼의 삼각형 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 파스칼의 삼각형(Pascal's triangle)은 수학에서 이항계수를 삼각형 모양의 기하학적 형태로 배열한 것이다. 이것은 블레즈 파스칼
ko.wikipedia.org
2) 모듈러 연산 : www.crocus.co.kr/1231
모듈러 연산(Modular Arithmetic)
목차 1. 모듈러 연산 2. 모듈러 합동 3. 모듈러 연산의 속성 4. 모듈러 인버스 5. 확장 유클리드 알고리즘을 이용한 곱셈 역수(역원) 구하기 1. 모듈러 연산 몇 가지 중요한 암호 시스템은 계산 결과
www.crocus.co.kr
'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글
2004번 조합 0의 개수 (0) | 2021.02.15 |
---|---|
1676번 팩토리얼 0의 개수 (0) | 2021.02.15 |
11050번 이항계수1 (0) | 2021.02.14 |
3036번 링 (0) | 2021.02.14 |
1037번 약수 (0) | 2021.02.13 |