많은 답이 있을 것 같은 소수 찾기 문제.
내가 생각해본 나의 풀이 :
isPrime으로 각 소수를 찾는다( i=2일때부터 root n까지 탐색)하고 n%i == 0이면 false를 반환한다.
이 isPrime으로 n까지 수들 돌면서 소수를 뽑는다.
그러나 훨씬 빠른 방법으로 소수를 찾을 수 있다.
그냥 이렇게 써 놓으면 무슨 말인지 모를 수가 있다.
어떤 수부터 n이라는 수까지 탐색을 하면서
배열을 지워 나가는 것이다
1) i=2일 때
i번째 인덱스를 가지고 있는 친구가 처음으로 내용물이 0인 상태로 발견이 되었다.
그러면 answer를 하나 증가시켜주고, 2의 배수인 친구들을 전부 내용물을 1로 바꿔준다.
이건 for문안의 j=j+i에 설정되어있다.
2) i=4일 때
아까 i=2로 인해 내용물이 1로 변했으므로 지나간다.
2중 포문을 돌기 때문에 굉장히 느릴것이라고 생각했지만, 내가 짰던 코드보다 훨씬 빠르다.
특히나 for문 안에 있는 j=j+i 스킬이 굉장히 유용할 것 같다.
하나의 포문 안에 변수를 2개 돌리는 스킬도 좋으니 찾아보자
'알고리즘 > 기타' 카테고리의 다른 글
Two pointers (0) | 2023.04.25 |
---|---|
[JAVA]지뢰 찾기 - 델타 배열을 이용한 방법 (0) | 2023.02.02 |
문자열 중복제거 - indexOf() (0) | 2023.01.29 |
문자열 전부뒤집기 - StringBuilder, toCharArray() (0) | 2023.01.27 |