1038번 - 감소하는 수
노가다 식으로 짜서, 대충 12개정도의 배열을 선언해서
끝에서부터 1씩올리면서 조건 판단을 하는 방식으로 했는데요;
1000만넣어도 1초?2초? 정도 걸리네요...
어디서 시간초과가 나는걸까요?
그리고 N번째 감소하는 수가없을때 -1이라고 하는데
없을 수가 있나요?? 무조건 존재하지 않나요?
#include<iostream>using namespace std;
int arr[12] = { 0, };
int main(){
int n; int count = 9; int index = 11;
cin >> n;
if (n < 10){ count = n; cout << count << endl; return 0; }
arr[10] = 1; arr[11] = 0;
while(1) { //확인 int i; for (i = 0; i <12; i++){
if (arr[i] != 0){
for (int j = i; j<= 10 ; j++){ if (arr[j] <= arr[j+1]) goto exit; else{ continue; } } count++; break; } }
exit: /*cout << "count :" << count << endl; for (int i = 0; i < 12; i++){ cout << arr[i] << " "; } cout << endl;*/
//탈출~ if (n == count) break;
//증가 arr[index]++;
for (int a = 11; a >= i; a--){ if (arr[a] >= 10){ arr[a - 1]++; arr[a] %= 10; }
}
//출력
for (int i = 0; i < 12; i++){ if (arr[i] != 0){
for (int j = i; j <= 11; j++) cout <<arr[j];
return 0; } }
제일 큰 감소하는 수는 9876543210 이겠죠?
생각해보면 감소하는 수의 개수가 엄청 적다는 걸 알 수 있습니다.
아... 9876543210이 있네요.. ㅋㅋ 감사합니다~혹시 시간초과의 원인은 알 수 없을까요..?1000을 넣어도 쫌 걸리는데
N이 1000이라 쳐도, 제가 생각할때는 위에 0이아닌수를 찾는 부분에서 많아야 120?
나와서 1증가시키는곳까지 합쳐도 한 100~200사이일거 같은데
그러면 약 1000*(100~200)쯤 되지 않을까요....?
N이 1000이 들어왔으면
바깥쪽 while문을 1000번만 반복하는게 아니라1000번째 감소하는 수가 나올때까지 반복하겠죠그리고 1000번째 감소하는 수는 대략 1억에 가까우니까당연히 시간초과가 나겠죠
댓글을 작성하려면 로그인해야 합니다.
bsdlcksdn 8년 전
노가다 식으로 짜서, 대충 12개정도의 배열을 선언해서
끝에서부터 1씩올리면서 조건 판단을 하는 방식으로 했는데요;
1000만넣어도 1초?2초? 정도 걸리네요...
어디서 시간초과가 나는걸까요?
그리고 N번째 감소하는 수가없을때 -1이라고 하는데
없을 수가 있나요?? 무조건 존재하지 않나요?
#include<iostream>
using namespace std;
int arr[12] = { 0, };
int main(){
int n;
int count = 9;
int index = 11;
cin >> n;
if (n < 10){
count = n;
cout << count << endl;
return 0;
}
arr[10] = 1;
arr[11] = 0;
while(1) {
//확인
int i;
for (i = 0; i <12; i++){
if (arr[i] != 0){
for (int j = i; j<= 10 ; j++){
if (arr[j] <= arr[j+1])
goto exit;
else{
continue;
}
}
count++;
break;
}
}
exit:
/*cout << "count :" << count << endl;
for (int i = 0; i < 12; i++){
cout << arr[i] << " ";
}
cout << endl;*/
//탈출~
if (n == count)
break;
//증가
arr[index]++;
for (int a = 11; a >= i; a--){
if (arr[a] >= 10){
arr[a - 1]++;
arr[a] %= 10;
}
}
}
//출력
for (int i = 0; i < 12; i++){
if (arr[i] != 0){
for (int j = i; j <= 11; j++)
cout <<arr[j];
return 0;
}
}
}