PS

BOJ 17828 - 문자열 화폐

728x90

www.acmicpc.net/problem/17828

 

17828번: 문자열 화폐

첫 번째 줄에 문자열의 길이 N(1 ≤ N ≤ 5,000,000)과, 문자열의 가치를 나타내는 정수 X(1 ≤ X ≤ 500,000,000)가 공백으로 구분되어 주어진다.

www.acmicpc.net

 

거의 구현문제에 가깝다

먼저 예외 처리 사항으로

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