inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

10. 자릿수의 합

선생님, 28번 문제를

251

celestial_

작성한 질문수 72

0

'일의 자리부터 연속적으로' 가 아니라

N!값을 구하였을 때, 일의자리부터 10의 자리는 모두 00이지만 중간에 000이나 0000이 나오게 되는 경우로 문제를 변형하였을 경우에는 어떻게 푸는게 제일 효율적일지 궁금합니다. 

1) N!값을 구한 뒤 그 값을 char로 형변환 한 다음 하나씩 탐색해나가면서 연속된 0의 개수를 구하는 방법 

현재로서는 이 방법 밖에 떠오르지 않는데.... 혹시 별 다른 방법이 있을까요? 궁금합니다 .

C++ 코테 준비 같이 해요!

답변 1

1

김태원

그렇게 문제를 바꾸면 엄청 어려운 문제가 되고 코드구현도 굉장히 복잡해집니다.

일단 N제한이 1000이기 때문에 N!값이 너무 커서 정수형 변수에 들어가지 않습니다. 그래서 N!값을 계산하는 것 자체가 힘듭니다. 만약 정수형 변수에 계산이 됬다면 계산된 값을 10으로 나눈 몫으로 계속 바꿔가면서 그 몫을 10으로 나눈 나머지가 0인지 확인하는 것이 좋을 것 같습니다.

#include<stdio.h>
int main() {
	long long N=8070008700210;
	while(N>0){
		int t=N%10;
		printf("%d\n", t);
		N=N/10;
	}
	return 0;
}

N!을 계산할 때는 일반적인 연산 코드를 쓰는 것이 아니라 알고리즘에 큰수 곱셈이라는 알고리즘이 있습니다. 이 방법을 써서 N!값을 구해야 하는데 많이 복잡합니다. 단순 두 개의 큰수를 곱하는 것도 아니구 N!을 큰 수 곱셈으로 구현하는 것은 엄청 복잡할 것 같습니다.  나중에 실력자가 되시면 도전해보시기 바랍니다.

테스트 케이스 질문

0

373

1

병합정렬 시간복잡도 질문

0

462

1

41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.

0

1345

2

질문드립니다.

0

376

1

질문드립니다!

0

430

1

dev 프로그램 질문

0

275

1

문제가 이해가 안되요

0

376

1

4번 나이차이 문제 접근법 질문 드립니다.

0

307

1

source file not compiled

0

1047

3

59번 질문드립니다.

0

372

1

25번 문제 질문

0

349

1

4. 나이차이 문제 질문입니다.

0

372

1

90번 라이언 킹 심바 1번 테스트 케이스

0

470

1

71번 문제 전역 변수 질문 있습니다

0

365

1

75번, 79번 priority_queue관련

1

356

1

75.최대 수입 스케줄

0

400

2

복면산 정답의 수

0

432

1

테스트 케이스에 대해서

0

445

1

수업 내용 질문입니다!

1

232

1

풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!

0

822

2

12. 플로이드-와샬(그래프 최단거리) . 27:25초

0

255

1

다른 풀이 방식

0

317

1

크루스칼 vs 프림

0

306

1

숫자 총개수 small 질문있습니다.

0

243

1