| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- SSAFYcial
- 네트워크 관리사
- SSAFY 7기
- 구글
- java 객체지향 프로그래밍
- html
- 네트워크 관리사 2급 실기
- KT
- 리얼클래스
- 백준위
- 코딩테스트 연습
- python
- 네트워크 관리사 2급
- 프로그래머스
- 우테코
- 코딩테스트
- 싸피
- 싸피셜
- 코테
- IT 트렌드
- it 이슈
- 백준
- 신문 스크랩
- 신문스크랩
- 인앱결제
- it 뉴스
- SSAFY
- 카카오
- IT 동향
- Java
- 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 |