https://www.acmicpc.net/problem/1010
접근 방식
nCr을 사용하여 계산을 바로 해주는 방법을 사용함
nCr은 조합 개수를 구하는 공식
(n! / (n-r)! ) / r!
시행 착오
- 처음엔 중복 없는 조합을 떠올렸음
그래서 조합을 구하는 재귀를 돌려서 했으나 시간초과
- findAnswer이라는 함수와 변수 answer의 타입을 모두 int로 설정해주었을 때
아래 예시를 돌리면 정답이 아닌 0이 나오는 오류가 발생함
예시) 1 / 13 29
알고 보니 오버플로우 문제였음
오버플로우가 발생했을 때
1이 나오면 음수, 0이 나오면 양수값이라는 의미이다.
따라서 int를 double로 변경해줬음
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 32 33 34 35 36 37 38 39 40 | package day_0810; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class n1010 { static double answer; static int n; // 서쪽에 있는 사이트의 개수 static int m; // 동쪽에 있는 사이트의 개수 public static double findAnswer(int n, int m) { double up=1; double down=1; for (int i = m; i >m-n; i--) { up*=i; } for (int i = n; i >0; i--) { down*=i; } return up/down; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); StringTokenizer st; for (int t = 0; t < T; t++) { st = new StringTokenizer(br.readLine()); answer=0; n=Integer.parseInt(st.nextToken()); m=Integer.parseInt(st.nextToken()); answer = findAnswer(n, m); // mCn , m>=n System.out.printf("%.0f\n",answer); } } } | cs |
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[2839] 설탕 배달 in Java (0) | 2022.08.11 |
---|---|
[17070] 파이프 옮기기 1 in Java (0) | 2022.08.10 |
[16935] 배열 돌리기 3 in Java (0) | 2022.08.10 |
[2563] 색종이 in Java (0) | 2022.08.09 |
[1861] 정사각형 방 in Java (0) | 2022.08.09 |