백준온라인

[백준온라인] 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

의 경우의 수를 계산하면 된다.