Study/알고리즘

백준 1233번 - 주사위 JAVA

토기발 2022. 8. 11. 23:44

이 문제는 저번에 푼 문제처럼 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();
	}
}