문제
BOJ 4697 - Fifty Coats of Gray
여러 방의 벽·천장 면적에서 창문·문 면적을 빼고 필요한 페인트 캔 수를 구하는 문제
풀이
각 방의 벽 4면과 천장의 총 면적을 계산한 뒤, 창문·문 면적을 빼고 방 개수를 곱한다. 캔 하나가 커버하는 면적으로 나누어 올림 처리한다.
코드
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, w, l, h, area, m;
while (cin >> n >> w >> l >> h >> area >> m && n != 0) {
double total_wall_area = 2 * (w * h + l * h) + (w * l);
double subtract_area = 0;
for (int i = 0; i < m; ++i) {
int sw, sh;
cin >> sw >> sh;
subtract_area += (sw * sh);
}
double total_paint_area = (total_wall_area - subtract_area) * n;
int cans = ceil(total_paint_area / area);
cout << cans << endl;
}
return 0;
}복잡도
- 시간: O(m) (m: 창문·문 개수)
- 공간: O(1)