inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

15번 질문입니다.

156

cosacoke

작성한 질문수 5

0

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int main()
{
	//freopen("input.txt", "rt", stdin);
	int N;
	scanf("%d", &N);

	bool* isPrime = new bool[N+1];

	for (int i = 0; i < N+1; ++i)
		isPrime[i] = true;

	for (int i = 2; i < N+1; ++i)
		for (int j = 2 * i; j < N+1; j += i)
			isPrime[j] = false;

	int cnt = 0;
	for (int i = 2; i < N+1; ++i)
		if (isPrime[i])
			cnt++;

	printf("%d\n", cnt);


	if (isPrime)
		delete[] isPrime;

	return 0;
}

강의시간에 보여주신 코드와 비교했을 때, Big(O)만 따져보면 뭐가 이득인지 궁금합니다.

그리고 알고리즘 문제를 풀 때, 동적할당은 피해야하는지도 궁금합니다.

감사합니다.

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

답변 2

0

김태원

안녕하세요^^

소수의 개수를 구하는 방법은 위에 코드처럼 에라토스테네스체로 푸는게 가장 효율적인 코드입니다.

아래 코드처럼 수정하면 더 좋습니다.

#include <stdio.h>

int main()
{
	//freopen("input.txt", "rt", stdin);
	int N;
	scanf("%d", &N);

	bool* isPrime = new bool[N+1];

	for (int i = 0; i < N+1; ++i)
		isPrime[i] = true;
	
	int cnt=0;
	for (int i = 2; i < N+1; ++i){
		if(isPrime[i]){
			cnt++;
			for (int j = 2 * i; j < N+1; j += i)
				isPrime[j] = false;
		}
	}
	printf("%d\n", cnt);


	if (isPrime)
		delete[] isPrime;

	return 0;
}

0

김태원

안녕하세요^^

코드르 위와 같이 올리시면 제가 볼 수가 없습니다. {;}버튼을 이용해서 올려주시면 감사하겠습니다.

동적할당은 하는게 좋습니다. 강좌 뒤로 가면 vector를 사용하면서 동적할당을 많이 합니다.

0

cosacoke

수정했습니다!

테스트 케이스 질문

0

389

1

병합정렬 시간복잡도 질문

0

475

1

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

0

1365

2

질문드립니다.

0

392

1

질문드립니다!

0

437

1

dev 프로그램 질문

0

276

1

문제가 이해가 안되요

0

380

1

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

0

309

1

source file not compiled

0

1066

3

59번 질문드립니다.

0

376

1

25번 문제 질문

0

351

1

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

0

377

1

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

0

473

1

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

0

366

1

75번, 79번 priority_queue관련

1

361

1

75.최대 수입 스케줄

0

404

2

복면산 정답의 수

0

437

1

테스트 케이스에 대해서

0

450

1

수업 내용 질문입니다!

1

236

1

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

0

841

2

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

0

257

1

다른 풀이 방식

0

319

1

크루스칼 vs 프림

0

314

1

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

0

246

1