문제 링크

요약

  • 그냥 binary search 하면 된다.

최종

  • 제곱근을 구하는 알고리즘은 여러가지가 있지만, 이 문제처럼 정수 정답을 찾아야 하고 코테에 맞는 수준의 알고리즘은 그냥 binary search 하는 것이다.
#define uint unsigned int
 
class Solution {
public:
	int mySqrt(int x) {
		uint l = 0;
		uint r = (1U << 31) - 1;
 
		while (l + 1 < r) {
			uint m = (l + r) >> 1;
			uint p = m * m;
 
			if (x < p) {
				r = m;
			} else if (p < x) {
				l = m;
			} else /* (p == x) */ {
				return m;
			}
		}
 
		return l;
	}
};