문제출처 : https://www.acmicpc.net/problem/12970
code
#include <iostream>
#include <string>
using namespace std;
int main()
{
int N, K, cnt = 0;
string S;
cin >> N >> K;
if ((N / 2) * (N - (N / 2)) < K)
S = "-1";
else if ((N / 2) * (N - (N / 2)) == K)
for (int i = 0; i < N; i++)
{
if (i < N / 2)
S.append("A");
else
S.append("B");
}
else if(K==0)
for (int i = 0; i < N; i++)
{
if (i == N-1)
S.append("A");
else
S.append("B");
}
else
{
for (int i = 0; i < N; i++)
S.append("B");
for (int i = 0; i < N; i++)
{
if (K - (i * (N - i)) >= 0)
cnt = i;
else
break;
}
K = K - (cnt * (N - cnt));
for (int i = 0; i < cnt; i++)
S[i] = 'A';
if (K != 0)
{
K += cnt;
S[N - 1 - K] = 'A';
}
}
cout << S;
return 0;
}
뭐 특별한 방법은 없었고, 전부다 B로 채운상태에서 앞부분부터 A를 채워서K의 갯수를 맞춰줬다.