-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
질문이 있습니다.
21.01.02 14:57 작성 조회수 140
0
안녕하세요 선생님. 질문이 있습니다.
Q1.
10억까지도 int형으로 표현할 수 있기 때문에,
저는 for문을 돌면서
if(i>=1 && i<=9) sum += 1;
else if(i>=10 && i<=99) sum +=2;
...
else if(i>=10000000 && i<=99999999) sum += 8;
else if(i == 1000000000) sum += 9;
이런식으로 코드를 구현하였습니다.
그리고
선생님의 설명을 듣고, 코드를 이런식으로 수정하였습니다.
if(N>=1 && N<=9)
{
sum += N;
}
else if(N>=10 && N<=99)
{
sum += 9*1;
sum += (N-9)*2;
}
else if(N>=100 && N<=999)
{
sum += 9*1;
sum += 90*2;
sum += (N-99)*3;
}
else if(N>=1000 && N<=9999)
{
sum += 9*1;
sum += 90*2;
sum += 900*3;
sum += (N-999)*4;
}
else if(N>=10000 && N<=99999)
{
sum += 9*1;
sum += 90*2;
sum += 900*3;
sum += 9000*4;
sum += (N-9999)*5;
}
else if(N>=100000 && N<=999999)
{
sum += 9*1;
sum += 90*2;
sum += 900*3;
sum += 9000*4;
sum += 90000*5;
sum += (N-99999)*6;
}
else if(N>=1000000 && N<=9999999)
{
sum += 9*1;
sum += 90*2;
sum += 900*3;
sum += 9000*4;
sum += 90000*5;
sum += 900000*6;
sum += (N-999999)*7;
}
else if(N>=10000000 && N<=99999999)
{
sum += 9*1;
sum += 90*2;
sum += 900*3;
sum += 9000*4;
sum += 90000*5;
sum += 900000*6;
sum += 9000000*7;
sum += (N-9999999)*8;
}
else if(N == 100000000)
{
sum += 9*1;
sum += 90*2;
sum += 900*3;
sum += 9000*4;
sum += 90000*5;
sum += 900000*6;
sum += 9000000*7;
sum += 90000000*8;
sum += 9;
}
수정하고 나니, loop을 돌지 않아 시간 복잡도 측면에서 더 효율적이라고 생각이 들었습니다.
그런데 추가적으로 여쭤보고 싶은것은, 입력할 수 있는 수의 범위가 10억이 아니라, int형으로 표현할 수 없는 범위라면
위의 방식을 그래도 사용하되, long long 자료형을 사용하여 정수를 표현하거나
or
아예 새로운 방식으로 구현을 해야되는거겠죠?
답변을 작성해보세요.
0
답변 1