문제 : 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
의 경우의 수를 계산하면 된다.
'백준온라인' 카테고리의 다른 글
| [백준온라인] 2003번 수들의 합 2 (0) | 2021.08.05 |
|---|---|
| [백준온라인] 1356번 유진수 (0) | 2021.08.04 |
| [백준온라인] 17404번 RGB거리 2 (0) | 2021.08.02 |
| [백준온라인] 20040번 사이클 게임 (0) | 2021.08.01 |
| [백준온라인] 9252번 LCS 2 (0) | 2021.07.31 |