728x90
거의 구현문제에 가깝다
먼저 예외 처리 사항으로
1) 문자열 화폐의 값어치 X 가 길이 N 보다 작은 경우
2) 문자열의 길이 N개의 Z 가 있음에도 X 보다 작은 경우
만들수 없는 수 이므로 예외처리로 중단 시킨다.
예외처리를 거치면
문자열이 사전순으로 나와야 하기 때문에
A 로 먼저 다 초기화 시키고 그만큼 넣었으므로, X 에 N 을 뺀다
그리고 사전순으로 최대값을 찾아야 하므로
문자열 뒤에서 부터 탐색을 시도하면서 X 값이 다 떨어진 경우 (X 가 0이하가 될때) 가 되기 전까지
반복문을 돌리면서 큰 문자 값으로 바꿔준다.
- C++
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int N, X;
string answer;
int main() {
cin.tie(0); ios_base::sync_with_stdio(0);
cin >> N >> X;
if (X < N || 26 * N < X) {
cout << "!";
return 0;
}
// 초기화
for (int i = 0; i < N; ++i) answer += 'A';
X -= N;
for (int i = N - 1; i >= 0 && X > 0; --i) {
int temp = min(X, 25);
answer[i] += temp;
X -= temp;
}
cout << answer;
return 0;
}
|
cs |
728x90
'PS' 카테고리의 다른 글
BOJ 1818 - 책정리 (0) | 2021.03.20 |
---|---|
BOJ 1911 - 흙길 보수하기 (0) | 2021.03.19 |
DP 와 누적합 (0) | 2021.03.18 |
BOJ 14728 - 벼락치기 (0) | 2021.03.18 |
BOJ 17845 - 수강 과목 (0) | 2021.03.18 |