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