※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 2546번 문제인 경제학과 정원영이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/2546 

 

2546번: 경제학과 정원영

C언어 수강생의 IQ를 올릴 수 있는 학생은 1번 학생과, 2번 학생이다. 근데, 1번 학생은 너무 멍청해서 경제학 원론을 수강해도 평균 IQ를 올리지 못한다. 하지만, 2번 학생은 할 수 있다.

www.acmicpc.net

C언어를 드랍해 수강생의 IQ를 올릴 수 있으려면 해당 학생의 IQ가 C언어 수강생의 평균IQ보다 낮아야 한다. 또한 경제학원론을 수강해 수강생의 IQ를 올릴 수 있으려면 해당 학생의 IQ가 경제학 원론 수강생의 평균IQ보다 커야 한다.

 

각 C언어 수강생에 대하여 해당 학생의 IQ와 전체 C언어 수강생의 평균 IQ, 경제학 원론 수강생의 평균 IQ를 이용해 부등식을 세워 문제를 해결하자. 이 때 평균을 구할 때 필요한 나눗셈을 부등식의 양변에 곱하는 것으로 부동소수점 오차 걱정 없이 문제를 해결할 수도 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;
typedef long long ll;

int T;
int N, M;
int A[200000], B[200000];
ll totalA, totalB;
int ans;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> T;
	while (T--) {
		totalA = totalB = 0;
		ans = 0;
		cin >> N >> M;
		for (int i = 0; i < N; i++) {
			cin >> A[i];
			totalA += A[i];
		}
		for (int j = 0; j < M; j++) {
			cin >> B[j];
			totalB += B[j];
		}

		for (int i = 0; i < N; i++) {
			if ((ll)A[i] * N < totalA && (ll)A[i] * M > totalB) ans++;
		}

		cout << ans << '\n';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 3283 // C++] BARCODE  (0) 2023.08.24
[BOJ 1799 // C++] 비숍  (0) 2023.08.23
[BOJ 15822 // C++] Ah-Choo!  (0) 2023.08.22
[BOJ 6765 // C++] Icon Scaling  (0) 2023.08.22
[BOJ 3447 // C++] 버그왕  (0) 2023.08.21

+ Recent posts