
문제

내 풀이 1 : 예제 탈락 - 날로 먹으려다 실패
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class Main extends Exception {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int num = Integer.parseInt(br.readLine());
BigInteger nFac = BigInteger.valueOf(1);
BigInteger rFac = BigInteger.valueOf(2);
BigInteger nMinr = BigInteger.valueOf(1);
for (int i = 1; i <= num; i++) {
nFac = nFac.multiply(BigInteger.valueOf(i));
}
for (int i = 1; i <= num - 2; i++) {
nMinr = nMinr.multiply(BigInteger.valueOf(i));
}
BigInteger answer = nFac.divide((rFac.multiply(nMinr))).divide(BigInteger.valueOf(2));
sb.append(answer);
System.out.println(sb.toString());
}
}
내 풀이 2 : 경우의 수 계산 - 정답
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class Main extends Exception {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int num = Integer.parseInt(br.readLine());
num /= 2;
BigInteger answer = BigInteger.valueOf(1);
for (int i = 1; i <= num*2-1; i+=2) {
answer = answer.multiply(BigInteger.valueOf(i));
}
sb.append(answer);
System.out.println(sb.toString());
}
}
느낀점
num이 2일 때는 1, 4일때는 3이 나왔다.
6일때는? 53의 답을 가지므로 15
8일때는? 75*3의 답을 가져서 105
중복을 제거해야하므로 num을 2로 나눠서 2,4,6,8을 1,2,3,4로 바꿔서 게산했다.
그 후 그냥 홀수가 하나씩 추가돼서... 그렇게 계산했다.
수가 어마어마하게 커지므로 답은 Biginteger로 받는다.