일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 헤드라인뉴스
- 파이썬
- 20201011뉴스
- LeetCode #Python #알고리즘 #코딩테스트 #interview
- 20200615뉴스
- 20201013뉴스
- 20200816뉴스
- 백준2225
- 오늘의뉴스
- 헤드라인
- 뉴스
- json
- 백준
- MySQL
- 20201015뉴스
- 20201016뉴스
- Python
- 크롤링
- 기사
- 코테
- 뉴스헤드라인
- encoding
- 20201018뉴스
- 헤드라인기사
- 20201017뉴스
- 알고리즘
- 경제뉴스
- 헤드라인모음
- 기사헤드라인
- C++
Archives
- Today
- Total
HelloCho
[Python] #204. Count Primes(easy) 본문
문제 :
이 문제는 n미만의 숫자들에서 소수를 찾는 문제이다.
처음에 시도한 방법은 2중 for문을 이용해 각 수의 배수의 값의 값을 채워 넣는다.
class Solution:
def countPrimes(self, n: int) -> int:
if n <=2 :
return 0
prime = [0] * (n+1)
cnt = 0
for i in range(2,n):
if prime[i] == 0 :
cnt += 1
for j in range(i,n,i):
prime[j] += 1
return cnt
결과
생각보다 속도가 느린 것 같다....
그래서 다른 방법을 생각했는데ㅜㅜ 생각이 안 나서 다른 유저의 답변을 찾았다.
class Solution:
def countPrimes(self, n: int) -> int:
if n <=2 :
return 0
prime = [1] * (n)
prime[0] = 0
prime[1] = 0
for i in range(2,n):
if prime[i]:
prime[i+i:n:i] = [0] * len(prime[i+i:n:i])
return sum(prime)
이 방법을 사용하게 될 경우
for문을 한 번만 사용해서 문제를 해결 가능하다.
원리는 인덱싱을 이용한 방법이다. prime 변수에 [1]을 n개 생성한다.
prime [i+i:n:i]의 indexing을 하게 되면 i*2부터 n까지 i의 간격으로 indexing을 하게 된다. 그리고 그 값에 [0]을 채워 넣는다.
결과
'코테 > LeetCode' 카테고리의 다른 글
[Python] #274. H-Index(Medium) (0) | 2020.09.30 |
---|---|
[Python] #125. Valid Palindrome(easy) (0) | 2020.09.30 |
[Python] #1351. Count Negative Numbers in a Sorted Matrix(easy) (0) | 2020.09.29 |
[Python] #209. Minimum Size Subarray Sum(Medium) (0) | 2020.09.29 |
[Python] #36. Valid Sudoku(Medium) (0) | 2020.09.17 |
Comments