백준 BaekJoon 2863번: 이게 분수?[Java] 자바

2020-10-09


문제

상근이는 덧셈과 나눗셈을 엄청나게 못한다.

이런 상근이를 위해 정인이는 상근이에게 다음과 같은 문제를 냈다.

정인이는 양의 정수 A,B,C,D로 이루어진 2*2 표를 그렸다.

위와 같은 표가 있을 때, 표의 값은 A/C + B/D 이다.

상근이는 표를 몇 번 돌리면 표의 값이 최대가 되는지 궁금해졌다.

표는 90도 시계방향으로 돌릴 수 있다.

문제 상단의 표를 1번 회전 시키면 다음과 같다.

2번 회전 시키면 다음과 같이 된다.

표에 쓰여 있는 A,B,C,D가 주어졌을 때,

표를 몇 번 회전시켜야 표의 값이 최대가 되는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 A와 B가 공백으로 구분되어 주어진다.

둘째 줄에 C와 D가 공백으로 구분되어 주어진다.

모든 수는 100보다 작거나 같은 양의 정수이다.

 

출력

첫째 줄에 표를 몇 번 돌려야 표의 값이 최대가 되는지 출력한다.

만약, 그러한 값이 여러개라면 가장 작은 값을 출력한다.

 


		Scanner scan = new Scanner(System.in);
		int [] arr1 = new int [2];
		int [] arr2 = new int [2];
		double [] sum = new double [5];
		//문제의 포인트는 초기 상태는 1회전으로 두지 않는다.
		
		
		for(int i =0; i < arr1.length; i++) {
			arr1[i] = scan.nextInt();
		}
		
		for(int i =0; i < arr2.length; i++) {
			arr2[i] = scan.nextInt();
		}
		//다중 배열이 아닌 배열 2개를 사용했다.
		

		double max = sum[0];
		int count = 0;
		
		for(int i = 1; i <= 4; i++) {
			int temp1 = arr1[0];
			int temp2 = arr1[1];
			//임시 변수를 만들어  옮길 배열을 
			//잠시 담아두었다.
			arr1[0] = arr2[0];
			arr1[1] = temp1;
			arr2[0] = arr2[1];
			arr2[1] = temp2;
			sum[i] = (arr1[0] / arr2[0]) + (arr1[1]  / arr2[1]);
			//분자가 클수롤 그 값은 큰 값이기 때문에 /(몫) 연산을 사용
			if(max < sum[i]) {
				max = sum[i];
				count = i;
				//기존값과 비교
			}
		}
		
		System.out.println(count);

 

출처 링크 : www.acmicpc.net/problem/2863

 

2863번: 이게 분수?

첫째 줄에 표를 몇 번 돌려야 표의 값이 최대가 되는지 출력한다. 만약, 그러한 값이 여러개라면 가장 작은 값을 출력한다.

www.acmicpc.net