백준 BaekJoon 10833번: 사과 [Java] 자바

2020-09-06


문제

경상북도 특산품인 사과를 학생들에게 나눠주기 위해 여러 학교에 사과를 배정하였다.

배정된 사과 개수는 학교마다 다를 수 있고,

학생 수도 학교마다 다를 수 있다.

 

각 학교에서는 배정된 사과를 모든 학생들에게 똑같이 나눠주되,

남는 사과의 개수를 최소로 하려고 한다.

(서로 다른 학교에 속한 학생이 받는 사과 개수는 다를 수 있다.)

예를 들어, 5개 학교의 학생 수와 배정된 사과 수가 다음과 같다고 하자.

 

A 학교에서는 모든 학생에게 사과를 두 개씩 나눠주고 4개의 사과가 남게 된다.

B 학교에서는 모든 학생에게 사과를 한 개씩 나눠주고 9개의 사과가 남게 된다.

비슷하게 C 학교에서는 3개의 사과가,

D 학교에서는 10개의 사과가,

E 학교에서는 0개의 사과가 남게 되어,

남는 사과의 총 수는 4+9+3+10+0 = 26이다. 

 

각 학교의 학생 수와 사과 개수가 주어졌을 때,

학생들에게 나눠주고 남는 사과의 총 개수를 구하는 프로그램을 작성하시오.

입력

첫 번째 줄에는 학교의 수를 나타내는 정수 N (1 ≤ N ≤ 100)이 주어진다.

다음 N 개의 줄에 각 학교의 학생 수와 배정된 사과 개수를 나타내는 두 개의 정수가 주어진다.

학생 수와 사과 개수는 모두 1이상 100이하이다. 

출력

남은 사과의 총 개수를 나타내는 정수를 출력한다.

 


소스코드

※ 포인트

//모든 학생들에게 공평한 갯수를 나누어주어야하기 때문에
//전체 사과갯수가 학생들보다 적어질때까지 빼준다.
//ex) 학생수 10명 남은 사과갯수 9개면 else문으로 넘어감

		Scanner scan= new Scanner(System.in);
		int Nclass = scan.nextInt();
		int[][] arr= new int [Nclass][2];
		int sum = 0;
		
		for(int i = 0; i < Nclass; i++) {
			for(int j = 0; j < 2; j++) {
				arr[i][j] = scan.nextInt();
			}
			loop : while(true) {
				if(arr[i][1] >= arr[i][0]) {
					//사과 수와 학생수를 비교
					arr[i][1] = arr[i][1] - arr[i][0];
					//모든 학생들에게 공평한 갯수를 나누어주어야하기 때문에
					//전체 사과갯수가 학생들보다 적어질때까지 빼준다.
					//ex) 학생수 10명 남은 사과갯수 9개면 else문으로 넘어감
				}else {
					break loop;
				}
		     }
			sum += arr[i][1];
			//남은 사과수를 더해줌
			}
		System.out.println(sum);

 

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

 

2864번: 5와 6의 차이

첫째 줄에 두 정수 A와 B가 주어진다. (1 <= A,B <= 1,000,000)

www.acmicpc.net