문제 링크입니다: https://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 미만일 경우
메인 로직은 아래와 같습니다.
1. 문자열을 모두 A로 채운 상태에서
2. 사전 순으로 정렬했을 때 맨 앞 문자열을 출력해야하므로 끝에서부터 min(현재 남은 점수, 25)를 계산한 뒤 해당 문자에 더해줍니다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
#include <algorithm> | |
using namespace std; | |
int N, X; | |
int main(void) | |
{ | |
ios_base::sync_with_stdio(0); | |
cin.tie(0); | |
cin >> N >> X; | |
// 예외 | |
if (26 * N < X || X < N) | |
{ | |
cout << "!\n"; | |
return 0; | |
} | |
string result; | |
for (int i = 0; i < N; i++) | |
{ | |
result += 'A'; | |
} | |
X -= N; | |
for (int i = N - 1; i >= 0 && X > 0; i--) | |
{ | |
int temp = min(X, 25); // A + 25 = Z | |
result[i] += temp; | |
X -= temp; | |
} | |
cout << result << "\n"; | |
return 0; | |
} |


개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
백준 2812번 크게 만들기 (4) | 2019.11.08 |
---|---|
백준 17829번 222-풀링 (0) | 2019.11.04 |
백준 17827번 달팽이 리스트 (0) | 2019.11.04 |
백준 17826번 나의 학점은? (0) | 2019.11.04 |
백준 17836번 공주님을 구해라! (2) | 2019.11.04 |