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 함수를 쓰게 되면 인덱스 번호와 배수 문제에 관해서 논리적 오류가 생겨서 리스트 형태는 그대로 유지하지만,
우리가 원하는 수들만 지우고 남길 수 있게 하는 역할을 한다.
'알고리즘' 카테고리의 다른 글
[백준 14467 소가 길을 건너간 이유1][파이썬] (0) | 2022.04.16 |
---|---|
[백준 2980 도로와 신호등][파이썬] (0) | 2022.04.13 |
[백준 5800 성적 통계][파이썬] (0) | 2022.04.11 |
[백준 1292 쉽게 푸는 문제][파이썬] (0) | 2022.04.11 |
[백준 1475 방 번호][파이썬] (0) | 2022.04.07 |