질문이 있습니다.
204
작성한 질문수 47
안녕하세요 선생님. 질문이 있습니다.
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
아예 새로운 방식으로 구현을 해야되는거겠죠?
답변 1
테스트 케이스 질문
0
371
1
병합정렬 시간복잡도 질문
0
461
1
41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.
0
1343
2
질문드립니다.
0
374
1
질문드립니다!
0
428
1
dev 프로그램 질문
0
274
1
문제가 이해가 안되요
0
375
1
4번 나이차이 문제 접근법 질문 드립니다.
0
306
1
source file not compiled
0
1036
3
59번 질문드립니다.
0
371
1
25번 문제 질문
0
347
1
4. 나이차이 문제 질문입니다.
0
370
1
90번 라이언 킹 심바 1번 테스트 케이스
0
469
1
71번 문제 전역 변수 질문 있습니다
0
362
1
75번, 79번 priority_queue관련
1
353
1
75.최대 수입 스케줄
0
396
2
복면산 정답의 수
0
429
1
테스트 케이스에 대해서
0
444
1
수업 내용 질문입니다!
1
230
1
풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!
0
818
2
12. 플로이드-와샬(그래프 최단거리) . 27:25초
0
252
1
다른 풀이 방식
0
316
1
크루스칼 vs 프림
0
305
1
숫자 총개수 small 질문있습니다.
0
238
1





