본문 바로가기
알고리즘

[백준 2960 에라토스테네스의 체][파이썬]

by Jyujae 2022. 4. 12.

https://www.acmicpc.net/problem/2960

 

--풀이

 

remove함수와 if문을 통해 가장 작은 값을 p로 지정하고 풀었더니 2의 배수를 다 지우고 나서 다음 과정 전개가 안돼서

다른 분의 코드를 참조하였고, 이해하기 쉽게 정리해보겠다.

 

1. 먼저 data에 True값을 가진 리스트를 n+1개 만큼 생성한 이유

-> 2부터 시작하는 숫자 리스트와 달리 우리는 0부터 시작하는 리스트를 만들어야함

-> 인덱스 번호로 비교하기 위함

ex) if data[2]==True부터 시작하게 될텐데, 만약 0부터 시작하지 않으면 data[2]는 3이나 4부터 시작하게 됨으로, 2에 대해서 로직에 적용시키지 못한다.

False 값으로 0, 1 자리에 주고 [True]*(n-1)로 작성하셔도 무관한듯하다.

 

2. x for 문

단지 x 라는 숫자에 대한 control을 위한 for 문이다. 2의 배수를 다 지운 후에는 3의 배수로 진행되는 로직을 당담한다.

x가 4일 때에는, if 문에 만족되는 조건이 없어서 오류 없이 패스된다.

 

3. y for 문

x로부터 p를 받는다고 생각하면 편하다. p를 2부터 시작하여 for, while 문에서 해결하지 못하는 p 로직을 해결해줌

 

4. True/ False

remove 함수를 쓰게 되면 인덱스 번호와 배수 문제에 관해서 논리적 오류가 생겨서 리스트 형태는 그대로 유지하지만,

우리가 원하는 수들만 지우고 남길 수 있게 하는 역할을 한다.