개발일지/알고리즘-문제풀기

프로그래머스 - LV1 - 기사단원의 무기

이건나이스가아니야 2023. 12. 7. 00:04

첫번째 풀이

약수의 갯수 구하기: O(n)

1~n까지 약수 갯수 체크 : O(n)

으로 O(n^2) 라서 시간초과 이슈 발생

총점 62/100

 

두번째 풀이

시간 반줄이는 방향으로 약수 갯수 구할때 범위 반쪼개서 한번에 구하는 식으로 변경

결국 O(n/2 * n )이기 때문에 역시 동일하게 시간초과 이슈 발생

총점 67/100

 

세번째 풀이

- 약수 갯수는 소인수분해 후 각 소수들에 대한 지수+1 의 곱인데, 이를 활용하는 방향 검토

- 소수를 저장해서 이용하는 방향으로 검토 

- 소수들에 대해서 1~k 까지 m^n승 모두 찾고 약수 갯수 업데이트 하는 방향 검토

= 여기서 도저히 뭔가 방법이 떠오르지 않음. 약수 갯수 구하는데, O(루트n) 시간 걸릴 것 같은데...

 

 

네번째 풀이

- 에라토스테네스의 체 ? 인가 뭔가를 씀. 

https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4

 

에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 에라토스테네스의 체 수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수

ko.wikipedia.org

이렇게 하면 소인수분해 되고, 약수의 갯수를 구할 수 있음. 시간복잡도 또한 O(n)보다 작아짐.

총점 100/100

 

알고리즘 자체로 잘 이해가 안됨. 설명은 내가 세번째 풀이때 의도한 방식이랑 비슷한 결인 것 같은데..