조합
2 초 | 128 MB | 34405 | 13150 | 11410 | 42.423% |
문제
nCm을 출력한다.
입력
n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n)
출력
nCm을 출력한다.
예제 입력 1 복사
100 6
예제 출력 1 복사
1192052400
모지 읽을 것도 별루 없구 짱 쉬워 보이잔하ㅏ~~~~~
구냥 nCm 출력이네??? 100C6 이면 (100 * 99 * 98 * 97 * 96 * 95) / (6 * 5 * 4 * 3 * 2 * 1) 아입니까!
그렇게 뚝딱 나온 첫 번째 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BJ_2407 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nm = br.readLine().split(" ");
int n = Integer.parseInt(nm[0]);
int m = Integer.parseInt(nm[1]);
double result = 1;
int count = m;
for (int i = 0; i < count; i++, n--, m--) {
result = result * n / m;
}
System.out.println(result);
}
}
근데 안 돌아감ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
계속 안 돌아가서 분모 분자 따로 분리해서 int형으로 했다가 사이즈 때문에 안 되는 것 같아서 long 타입으로 바꿔줬더니 예제로는 돌아갔음
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BJ_2407 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nm = br.readLine().split(" ");
int n = Integer.parseInt(nm[0]);
int m = Integer.parseInt(nm[1]);
long nResult = 1;
int mResult = 1;
int count = m;
while (0 < count) {
nResult *= n;
mResult *= m;
n--; m--; count--;
}
System.out.println(nResult / mResult);
}
}
힝 런타임 에러...
이거 쉽게 생각했는데 의외로 오류가 많이 나네ㅎ
예전에 확통 때 배웠던.... 100C51은 100C49와 같다를 떠올리며 if문을 넣어줬다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BJ_2407 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nm = br.readLine().split(" ");
int n = Integer.parseInt(nm[0]);
int m = Integer.parseInt(nm[1]);
if (n < m * 2) {
m = n - m;
}
long nResult = 1;
long mResult = 1;
int count = m;
while (0 < count) {
nResult *= n;
mResult *= m;
n--; m--; count--;
}
System.out.println(nResult / mResult);
}
}
뭐야ㅡㅡ 슬슬 빡치기 시작하는데???
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BJ_2407 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nm = br.readLine().split(" ");
int n = Integer.parseInt(nm[0]);
int m = Integer.parseInt(nm[1]);
if (n / 2 < m) {
m = n - m;
}
long nResult = 1;
long mResult = 1;
int count = m;
while (0 < count) {
nResult *= n;
mResult *= m;
n--; m--; count--;
}
System.out.println(nResult / mResult);
}
}
if 조건 바꿨는데도 안 됨 왜 안 되냐고~!!!!
짜증나서 초코하임 먹는 중;; 근데 이거 유통기한 지난 것 같다 언제부터 내 방에 있던 거지? 참 눅눅하네..
100 50으로 돌리고 nResult mResult 각각 돌려보니까 오버플로우 나는 듯... long 다음 타입이 뭐임.......
구글링해서 찾았다 BigInteger 이거 써야 한다는데???
찾아서 수정...!! m이랑 count도 겹쳐서 지우고 m으로 통일했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class BJ_2407 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nm = br.readLine().split(" ");
int n = Integer.parseInt(nm[0]);
int m = Integer.parseInt(nm[1]);
// m이 n의 절반보다 클 때
if (n / 2 < m) {
m = n - m;
}
// 오버플로우 막기 위해 BigInteger로 변수 생성, ONE(1)으로 세팅
BigInteger nResult = BigInteger.ONE;
BigInteger mResult = BigInteger.ONE;
// m이 0보다 클 때 반복
while (0 < m) {
nResult.multiply(BigInteger.valueOf(n)); // multiply로 곱해줌, valueOf로 BigInteger로 변환해서 곱해줘야함
mResult.multiply(BigInteger.valueOf(m));
n--;
m--;
}
System.out.println(nResult.divide(mResult)); // 나누기는 divide
}
}
근데...! 백준에 돌리기 전에 테스트 돌려봤는데 1 나옴 그냥 다 1 나옴ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
이유는 nResult.multiply(BigInteger.valueOf(n)); 이거를 쓰면 여기에 저장되는 게 아니라 그대로 반환된다고 한다..!!!!!
nResult = nResult.multiply(BigInteger.valueOf(n));
이렇게 해줘야 된다 함...
그 부분 수정해서 돌렸구
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nm = br.readLine().split(" ");
int n = Integer.parseInt(nm[0]);
int m = Integer.parseInt(nm[1]);
// m이 n의 절반보다 클 때
if (n / 2 < m) {
m = n - m;
}
// 오버플로우 막기 위해 BigInteger로 변수 생성, ONE(1)으로 세팅
BigInteger nResult = BigInteger.ONE;
BigInteger mResult = BigInteger.ONE;
// m이 0보다 클 때 반복
while (0 < m) {
nResult = nResult.multiply(BigInteger.valueOf(n)); // multiply로 곱해줌, valueOf로 BigInteger로 변환해서 곱해줘야함
mResult = mResult.multiply(BigInteger.valueOf(m));
n--;
m--;
}
System.out.println(nResult.divide(mResult)); // 나누기는 divide
}
}
성공!!!!!!!!
휴
짧다고 얕보면 안 된다
참... 괜히 이 사이에 끼어있는 게 아니었어...........
'백준 풀기' 카테고리의 다른 글
백준 17626번: Four Squares with Java (1) | 2024.07.25 |
---|---|
백준 2346번: 풍선 터뜨리기 with Java (0) | 2024.07.21 |
백준 17413번: 단어 뒤집기 2 with Java (1) | 2024.07.17 |
백준 15656번: N과 M (7) with Java (3) | 2024.07.16 |
백준 11478번: 서로 다른 부분 문자열의 개수 with Java (1) | 2024.07.14 |