백준 17828번 - 문자열 화폐

박진형·2021년 5월 18일
0

algorithm

목록 보기
4/111

문제 풀이

벡터에 'A'로 n개 만큼 할당을 하고 맨 뒤에서부터 Z로 교체할 수 있으면 교체하고 교체하지 못한다면 현재 위치보다 앞에 있는 A의 개수들과 현재까지의 채운 가중치를 통해 현재에 어떤 알파벳이 들어가야할지 알 수 있다.

문제 링크

boj/17828

소스코드

PS/17828.cpp

#include <string>
#include <vector>
#include<iostream>
#include<memory.h>
#include<map>
#include<float.h>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	vector<char> v;
	int n, x, cur;
	cin >> n >> x;

	for (int i = 0; i < n; i++)
		v.push_back('A');
	cur = n;
	int idx = n - 1;
	if (n * 26 < x || n > x)
	{
		cout << "!";
		return (0);
	}
	while (idx >= 0)
	{
		if (x - (idx + 1) - 26 >= 0)
		{
			v[idx] = 'Z';
			idx--;
			x -= 26;
		}
		else
		{
			v[idx] = 'A' + x - (idx + 1);
			cur += x - (idx + 1);
			break;
		}
	}

	for (int i = 0; i < v.size(); i++)
		cout << v[i];
}


0개의 댓글