백준온라인
[백준온라인] 2546번 경제학과 정원영
cbkpar
2021. 8. 3. 00:00
문제 : https://www.acmicpc.net/problem/2546
2546번: 경제학과 정원영
C언어 수강생의 IQ를 올릴 수 있는 학생은 1번 학생과, 2번 학생이다. 근데, 1번 학생은 너무 멍청해서 경제학 원론을 수강해도 평균 IQ를 올리지 못한다. 하지만, 2번 학생은 할 수 있다.
www.acmicpc.net
문제 요약 : 두 과목의 평균 IQ를 올릴 수 있는 사람 수 출력
입력 | 출력 |
2 ≤ N(C언어 수강생) ≤ 200000 2 ≤ M(경제학 수강생) ≤ 200000 1 ≤ IQ ≤ 100000 |
C언어를 드랍하고 경제학을 들었을 때 두 과목 평균 IQ를 높일 수 있는 학생 수 출력 |
JAVA
소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_2546.java
채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
31146707 | cbkpar | 2546 | 맞았습니다!! | 58600KB | 548ms | Java 11 | 1002B |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int t,i,n,m,s;
long suma,sumb;
t = Integer.parseInt(br.readLine());
while(t-->0) {
br.readLine();
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
long[] arra = new long[n];
suma = sumb = 0;
st = new StringTokenizer(br.readLine());
for(i=0;i<n;i++) {
arra[i] = Integer.parseInt(st.nextToken());
suma += arra[i];
}
st = new StringTokenizer(br.readLine());
for(i=0;i<m;i++) sumb += Integer.parseInt(st.nextToken());
s = 0;
for(i=0;i<n;i++) if(arra[i]*n<suma&&arra[i]*m>sumb) s++;
sb.append(s+"\n");
}
System.out.println(sb);
}
}
해당 학생의 IQ가
C언어 수강생의 평균 IQ 보다 작고
경제학 학생의 평균 IQ보다 큰
경우의 수를 출력해주면 된다.
이때 해당 과목의 평균은
평균 = 해당 과목의 총합 / 해당 과목의 수강생 수로 나타낼 수 있으며
int형의 경우 소수점 아래부분이 제거되므로
이항 시켜 곱셈으로 바꿔준다.
따라서
해당 학생의 IQ * C언어 수강생 수 > C언어 수강생의 총 IQ
해당학생의 IQ * 경제학 수강생 수 < 경제학 수강생의 총 IQ
의 경우의 수를 계산하면 된다.