#include <stdio.h>
char word[101];
char word_line[101];
char result[101];
void set(int n);
int count(void); //문자열의 길이
void search(int n); //주어진 단어 바로 다음에 나타나는 단어 찾기
void line_set(int a, int n);
char next_word(int a, int n);
int main(void)
{
int n, i;
scanf("%s", word);
n=count();
set(n);
search(n);
result[n+1]='\0';
printf("%s", result);
return 0;
}
int count(void)
{
int i, cnt=0;
for(i=0; word[i]!='\0'; i++)
cnt++;
return cnt-1;
}
void set(int n)
{
int i;
for(i=0; i<=(n+1); i++)
word_line[i]='0';
}
void search(int n)
{
int i, a=-1;
for(i=n; i>0; i--)
{
if(word[i]>word[i-1])
{
a=i-1;
break;
}
}
if(a==-1)
{
for(i=0; i<=n; i++)
{
result[i]=word[i];
}
}
else
{
for(i=0; i<a; i++)
{
result[i]=word[i];
}
line_set(a, n);
char next=next_word(a, n);
result[a]=next;
int b=0;
for(i=1; i<=(n-a+1); i++)
{
if(word_line[i+b]==next) b=1;
result[i+a]=word_line[i+b];
}
}
}
void line_set(int a, int n)
{
int i, j, cnt=0, c=0;
for(i=a; i<=n; i++)
{
cnt=1;
c=0;
for(j=a; j<=n; j++)
{
if(word[i]>word[j])
cnt++;
}
if(word_line[cnt]=='0')
{
word_line[cnt]=word[i];
}
else
{
while(word_line[cnt+c]!='0')
{
c++;
}
word_line[cnt+c]=word[i];
}
}
}
char next_word(int a, int n)
{
int i;
char min='Z';
for(i=1; i<=(n-a+1); i++)
{
if(word_line[i]>word[a] && min>word_line[i])
{
min=word_line[i];
}
}
return min;
}
2018.05.26 12:49
정올 - 실전대비 - 단어맞추기(1034)
조회 수 746 추천 수 0 댓글 0