개발바닥

BOJ_17828 [ 문자열 화폐 ] 본문

[ Algorithm ]/ [ BOJ ]

BOJ_17828 [ 문자열 화폐 ]

라이언 2020. 4. 8. 10:23
반응형

문제

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

 

17828번: 문자열 화폐

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

www.acmicpc.net

문제 해결 방법

문제에서 문자열의 길이 N과 조건을 만족하면서 사전 순으로 가장 앞서는 문자열을 출력해야되므로,

문자열 길이 N만큼 'A'를 만들고 문자열 길이마다 1씩 사용했으므로 M에서 N을 빼준다.

그리고 'Z' 가 몇개 필요한지 알아야 되므로 M에서 25를 나눈다.

뒤에서부터 Z를 만들고 나머지 값을 이용해서 Z앞에 글자에 더해주면 문제를 해결할 수 있다.

 

 

소스 코드

https://github.com/jokerKwu/BOJ_Algorithm/blob/master/string%20processing/boj_17828.cpp

 

jokerKwu/BOJ_Algorithm

Contribute to jokerKwu/BOJ_Algorithm development by creating an account on GitHub.

github.com

#include<iostream>
#include<string>
using namespace std;
int N, X;
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	cin >> N >> X;
	string str = "";
	if (N > X||(26*N)<X) {
		cout << "!" << '\n';
	}
	else {
		int tmp = X - N;
		int value = (tmp / 25);		// Z 가 필요한 개수
		int mod = (tmp%25);			
		for (int i = 0; i < N; i++) {
			str += 'A';
		}
		int index = 0;
		if (value > 0) {
			for (int i = N - 1; i >= N - value; i--) {
				str[i] = 'Z';
				index = i;
			}
			if (index >= 1)
				str[index - 1] += mod;
			else if (index == 0)
				str[index] += mod;
				
		}else
			str[index] += mod;
		for (int i = 0; i < N; i++) {
			cout << str[i];
		}cout << '\n';
	}
	return 0;
}
반응형

'[ Algorithm ] > [ BOJ ]' 카테고리의 다른 글

BOJ_16935 [ 배열 돌리기 3 ]  (0) 2020.05.07
BOJ_17069 [ 파이프 옮기기2 ]  (0) 2020.05.07
BOJ_18809 [ 수 찾기 ]  (0) 2020.04.08
BOJ_17140 [ 이차원 배열과 연산 ]  (0) 2020.04.08
BOJ_2251 [ 물통 ]  (0) 2020.04.08
Comments