※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |