알고리즘
[JAVA] [SWEA] 7102. 준홍이의 카드놀이
4NIng
2019. 5. 9. 23:34
문득 준홍이는 각 카드 세트에서 카드를 한 장씩 골라서 카드에 적힌 숫자를 합한 결과 중, 등장할 확률이 가장 높은 숫자는 어떤 숫자일지 궁금해졌다.
단, 카드 세트에서 어떤 카드를 선택할 확률은 모두 동일하다고 가정한다.
이를 계산하는 프로그램을 작성하라.
카드 두세트가 있고 여기서 숫자들의 합중 가장 빈도수가 많은 합을 출력한다.
단, 밑에 제약 조건으로 오름차순으로 정렬하라고 되어 있다.
이 문제의 경우 매우 간단하게 풀릴 수 있다.
N, M 이 주어질 때 더 큰수를 먼저 찾는다.
예를 들어 N = 6, M= 3 일때 나올 수 있는 합은 2 ~ 9 까지의 수가 될 것이다.
이때 2는 1+1 , 9 는 3+9로 누가 봐도 제일 빈도수가 작을 것으로 예상된다.
그렇다면 이제 빈도수를 계산을 어떻게 할 것이냐를 보아야할텐데
나의 경우 3+1~ 6+1 까지의 수가 빈도수가 높다고 직관적으로 확인하였다.
이 것의 경우 다양한 숫자를 넣어 3번 정도만 하게 되면 알 수 있는데
실제 나와있는 테스트 케이스의 경우에서도
6 6 의 경우 7
6 4 의 경우 5 6 7 이 나왔다.
이를 코드로 표현하면 다음과 같다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Solution {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
int N = 0;
int M = 0;
int num1 = 0;
int num2 = 0;
String[] s = null;
for(int t=1;t<=T;t++) {
s = br.readLine().split(" ");
N = Integer.parseInt(s[0]);
M = Integer.parseInt(s[1]);
if(N > M) {
num1 = N;
num2 = M;
}else {
num1 = M;
num2 = N;
}
bw.write("#"+t+" ");
for(int i=1+num2; i<=num1+1; i++) {
bw.write(""+i+" ");
}
bw.write("\n");
}
br.close();
bw.close();
}
}