Koder / 박성훈
article thumbnail

의외로 골드V에 날먹이 많구만

아주 좋다.

 

www.acmicpc.net/problem/17828

 

느낌표를 출력해야 하는 경우는 단 두가지밖에 없다.

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;
}

구현이 간단해서 좋았다.

반응형