강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

australialove19님의 프로필 이미지
australialove19

작성한 질문수

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

7. 소수의 개수(에라토스테네스 체)

인덱스 번호

작성

·

185

2

매 강의를 들으면서 많은 걸 배워갑니다 좋은 강의에 대한 감사를 전하며 질문 시작하겠습니다 !

리스트를 사용할 때 매번 인덱스가 등장하면서 헷갈리는데요

이번 문제에서는 인덱스를 0부터 시작하지 않고 1로 가정하고 시작하셨는데, 왜 그런지 이해가 되지 않습니다 ㅠㅠ

```

for i in range(2, n+1):

    if ch[i] ==0:

```

이 코드가 있을 때,  i가 2부터 시작하면 사실상 리스트의 3번째 부터 시작인데... 앞의 숫자 1,2는 왜 포함이 안되나요..?

답변 2

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

인덱스 변수인 i가 우리가 소수인지를 확인하는 숫자라고 생각하시면 됩니다. 

0

처음에 배열(리스트)크기가 어느정도였나요?

전체코드를 한번보여주세요!

```

n=int(input()) 
ch=[0]*(n+1)
cnt=0
for i in range(2, n+1):
if ch[i] == 0:
if ch[i]==0:
cnt+=1
for j in range(i, n+1, i):
ch[j]=1
print(cnt)

```

전체코드입니다 !

생각하기 쉽게 인덱스 0을 버리고 배열 길이를 하나 더 늘려준걸까요..?

그러면 공간 낭비는 아닌지 ㅠㅠ

아!!! 어차피 0과 1은 소수가 아니고,

i=2부터 시작해도 일반적으로 생각하는 숫자와 인덱스 번호와 일치하니까 ..!

이렇게 한 것 같은데 맞나요..!??

하지만 0은 고려할 부분이 아닌 것 같은데...여기에 대한 의문만 해결하면 완전히 이해될 것 같아요..!

예를들어서 처음의 ch = [0]*(n+1)를 ch = [0]*(n)로 바꿔도 인덱스에러가 나니까 어쩔 수 없을것같아요.

australialove19님의 프로필 이미지
australialove19

작성한 질문수

질문하기