Skip to content

Instantly share code, notes, and snippets.

@Yimyujin
Created February 6, 2019 02:57
Show Gist options
  • Save Yimyujin/869f1521f91157ca938fe808e5ff3c6e to your computer and use it in GitHub Desktop.
Save Yimyujin/869f1521f91157ca938fe808e5ff3c6e to your computer and use it in GitHub Desktop.
Problem B_Tidy Numbers
#pragma warning (disable:4996)
#include <stdio.h>
/*
* 속도 : O(N)
* 메모리 : O(N)
*/
char num[19];
char ans[19];
int len;
int get_len(char *str) {
int i = 0;
while (str[i++]);
return i-1;
}
void solve() {
int start_p;
int end_p = 0;
int is_same = 0;
int i;
int len = get_len(num);
start_p = len;
if (len == 1) {
ans[0] = num[0];
}
for (i = 0; i < len-1; ++i) {
// 상승
if (num[i] < num[i + 1]) {
is_same = 0;
ans[i] = num[i];
}
// 같음
else if (num[i] == num[i + 1]) {
ans[i] = num[i];
if (!is_same) {
is_same = !is_same;
start_p = i;
}
}
// 하향
else {
if (num[i] == '1') {
start_p = 0;
end_p = 1;
}
else if(is_same){
ans[start_p] = num[start_p] - 1;
start_p = start_p + 1;
}
else {
ans[i] = num[i] - 1;
start_p = i + 1;
}
for (i = start_p; i < len - end_p; ++i) {
ans[i] = '9';
}
ans[i] = '\0';
return;
}
}
ans[len - 1] = num[len - 1];
ans[len] = '\0';
return;
}
int main() {
int testcase;
scanf("%d", &testcase);
for (int i = 1; i <= testcase; ++i) {
scanf("%s", num);
solve();
printf("Case #%d: %s\n", i, ans);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment