안녕하세요. 오늘은 영감을 얻을거예요.

문제

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

아이디어

2부터 N까지 다 봅시다.
sum(N,x)를 N을 x진법으로 표현했을 때의 각 자릿수의 합이라고 정의합시다.
그러면 sum(N,x) (2<=x<=N)의 최댓값을 구해주면 됩니다.

소스코드

#include <iostream>
using namespace std;

int sum(int N, int x)
{
	int ans = 0;
	while (N)
	{
		ans += N % x;
		N /= x;
	}
	return ans;
}

int main(void)
{
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int mx = 0, p = 0, N, i;

	cin >> N;
	for (i = 2; i <= N; i++)
	{
		int SUM = sum(N, i);
		if (SUM > mx)
		{
			mx = SUM;
			p = i;
		}
	}
	cout << mx << ' ' << p;
}


감사합니다.

0개의 댓글