의외로 골드V에 날먹이 많구만
아주 좋다.
느낌표를 출력해야 하는 경우는 단 두가지밖에 없다.
1 ) ZZZZZZ와 같이 길이가 N일때의 가치를 최대로 해도 X에 미치지 못하는 경우
2 ) N일때의 가치를 최소로 해도 X보다 커지는 경우
각각 n*26 < x 와
n > x 라는 수식을 통해 판별해줄 수 있다.
사전순으로 앞서는 문자열을 만들기위해서는
다른건 다 무시하더라도
앞에 오는 A의 개수가 가장 많아지면 될 것이다.
그렇기에 최대한 타이트한 선까지 A를 출력하고,
A와 Z 사이에 "단 한글자만" 남는 가치를 매꾸고,
남은 모든 길이를 Z로 출력해주면
사전순으로 가장 앞서는 문자열이 만들어지게 된다.
더보기
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, x;
scanf("%d %d", &n, &x);
if(n*26 < x || n > x){ printf("!"); return 0; }
while((n-1)*26 > x){
printf("A");
x--;
n--;
}
printf("%c", 64 + x - (n-1)*26);
for(int i=1; i<n; i++) printf("Z");
return 0;
}
구현이 간단해서 좋았다.
반응형