[C++] SWEA 18799. 평균의 평균

멋진감자·2025년 3월 20일
0

알고리즘

목록 보기
114/117
post-thumbnail

🌽 문제

🥕 입출력

🥔 풀이

부분집합은 DFS 써서 구했고, 은근 소수점 처리가 관건일지도 모르겠다.
20자리까지 출력하되 뒤에 붙은 0은 제거해야 한다.
열심히 서치한 결과 cout으로 printf%g 효과를 내는 친구를 찾았다.
그것은 바로 defaultfloat.

fixed는 후행의 0을 포함하여 소수점 이하 자릿수를
setprecision(n)만큼 강제로 유지하는 반면
defaultfloat은 후행의 0을 자동 제거하여 필요한 만큼만 표시한다.

오랜만에 dfs 쓰느라고 머리 좀 썼다.
기억이 너무 빨리 사라지는 것 같아 안타까웠다,, (내 뇌 한정)

🥬 코드

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;

int t, n, ans;
vector<int> arr, v;
vector<double> avg;

void dfs(int lev) {
	if (lev >= n) {
		if (!v.empty()) {
			double sum = 0;
			for (int i = 0; i < v.size(); i++) sum += v[i];
			avg.push_back(sum / v.size());
		}
	}
	else {
		v.push_back(arr[lev]);
		dfs(lev + 1);
		v.pop_back();
		dfs(lev + 1);
	}
}

int main() {
	cin >> t;
	for (int i = 1; i <= t; i++) {
		cin >> n;
		arr.resize(n);
		avg.clear();
		
		for (int j = 0; j < n; j++) cin >> arr[j];
		dfs(0);

		double sum = 0;
		for (double x : avg) sum += x;
		double ans = sum / avg.size();
		cout << "#" << i << " " << setprecision(20) << defaultfloat << ans << "\n";
	}

	return 0;
}

🥜 채점

D4 어려운데

profile
난멋져

0개의 댓글

관련 채용 정보