이 문제는 저번에 푼 문제처럼 for문을 여러번 돌리면 된다.
그런데 가장 많이 나온 수는 1157번 - 단어 공부 풀었을 때처럼 max에 자리바꿔주기 하면 되겠지 하면서 쓰다가
출력할 때 답이 여러개일 경우 가장 합이 작은 것을 출력해야 한다는 문구가 있어서 당황했다.
그래서 다른 블로그들을 참고해서 math.max()로 해결했다.
math.max란? 두 개의 수 중 더 큰 수를 찾을 때 사용하는 함수이다. 이것으로 가장 많이 발생하는 수를 key에 저장해두고,
다시 for문을 돌려서 제일 작은 수일 때 break하면 된다.
public class Main {
public static void main(String[] args) throws Exception{
int S1, S2, S3;
Scanner in = new Scanner(System.in);
S1 = in.nextInt();
S2 = in.nextInt();
S3 = in.nextInt();
int num1[] = new int[S1];
int num2[] = new int[S2];
int num3[] = new int[S3];
int num4[] = new int[S1*S2*S3];
for(int i = 0; i < 40; i++) { //각 배열에 값 넣기
if(num1.length >= i + 1) {
num1[i] = i + 1;}
if(num2.length >= i + 1) {
num2[i] = i + 1;}
if(num3.length >= i + 1) {
num3[i] = i + 1;}
}
int sum = 0;
for(int i = 0; i<num1.length; i++) {
for(int j = 0; j<num2.length; j++) {
for(int k = 0; k<num3.length; k++) {
sum = num1[i]+num2[j]+num3[k];
num4[sum]++; //모든 경우의 수 더하기(완전탐색)
}
}
}
int key = 0, result = 0;
for(int i = 0; i<num4.length; i++) {
key = Math.max(key, num4[i]);//더 많이 나온 수를 key에 저장
}
for(int i = 0; i<num4.length; i++) { //작은 수를 꺼내기 위해 for문을 다시 돌림
if (key == num4[i]) {
result = i;
break;
}
}
System.out.println(result);
in.close();
}
}
'Study > 알고리즘' 카테고리의 다른 글
이것이 코딩 테스트다 - 그리디(거스름돈, 큰 수의 법칙) (0) | 2022.08.26 |
---|---|
백준 1267번 - 핸드폰 요금 JAVA (0) | 2022.08.20 |
백준 1225번 - 이상한 곱셈 JAVA (0) | 2022.08.10 |
1193번 - 분수찾기 JAVA (0) | 2022.08.05 |
백준 1173번 - 운동 JAVA (0) | 2022.08.04 |