(Math) Sqrt(x)
13 Nov 2019 | algorithm programming leetcodeSqrt(x)를 구하는 문제이다. 기본 Math 라이브러리에서 제공하기 때문에 쉽게 구현할 수 있다.
class Solution { public int mySqrt(int x) { return (int)Math.sqrt((double)x); } }
하지만 문제 출제 의도는 그게 아닐것이다. 따라서 이렇게 구현할 수 있다.
class Solution { public int mySqrt(int x) { for (int i=1; i<=x; i++) { int ii = i*i; if(ii == x) { return i; } if(ii > x) { return i-1; } } return 0; } }
하지만 이는 숫자가 매우 커질경우 타임리밋을 유발한다. 따라서 바이너리 서치를 사용하면 시간복잡도를 줄일 수 있다.
class Solution { public int mySqrt(int x) { if(x < 2){ return x; } long l = 1L; long r = x / 2; long res = l; while(l <= r){ long mid = (l + r) / 2; if(mid * mid == x){ return (int)mid; } if(mid * mid > x){ r = mid - 1; }else{ res = mid; l = mid + 1; } } return (int)res; } }