반응형
https://www.hackerrank.com/challenges/ctci-big-o/problem
주어진 수가 소수인지 아닌지 판별하되, O(sqrt(n)) 시간안에 답을 내야하는 문제다.
에라토스테네스의 체라는 방법을 알아보면, n이 소수인지 아닌지 판별하기 위해서는 sqrt(n) 이하의 수만 나눠보면 된다고 한다.
왜 sqrt(n)이하의 수만 나누어 보면 되는지는 포스트 http://makedotworld.tistory.com/13 를 참조하길 바란다.
코드는 아래와 같다.
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 32 33 | void isPrime(int number) { bool isprime = true; if(number == 1) { cout << "Not prime" << endl; return; } if(number%2==0) { if(number != 2) { cout << "Not prime" << endl; return; } } for (int i = 3; i*i <= number; i=i+2) { if(number%i == 0) { isprime = false; break; } } if(isprime) { cout << "Prime" << endl; } else { cout << "Not prime" << endl; } } | cs |
풀이 시간 : 10분
풀이 중 문제점 :
1. 1인경우를 판별하지 않아 몇몇 케이스가 Fail이 나왔다.
2. 에라토스테네스의 체 개념을 다시 검색해 봤다. (백준 알고리즘 풀이를 하다 이미 개념을 숙지하고 있었는데 까먹음)
반응형
'개발자의 길 > Algorithm' 카테고리의 다른 글
[Algorithm] 해커랭크 - Recursion: Davis' Staircase (0) | 2018.03.28 |
---|---|
[Algorithm] 해커랭크 - Hash Tables: Ice Cream Parlor (0) | 2018.03.28 |
[Algorithm] 해커랭크 - Sorting: Comparator (0) | 2018.03.26 |
[Algorithm] 해커랭크 - Bit Manipulation: Lonely Integer (0) | 2018.03.22 |
[Algorithm] 해커랭크 - Recursion: Fibonacci Numbers (0) | 2018.03.22 |