문제 설명 :
int 값이 하나 주어지고, 이 int 값의 제곱근(제곱근이 소수인 경우 소수점 이하는 버림)을 구하는 문제이다.
class Solution {
public int mySqrt(int x) {
if(x == 0) return 0;
long left = 0;
long right = x;
while(left <= right){
long mid = (left+right)/2;
if(mid*mid == x){
return (int)mid;
}else if(mid*mid < x){
left = mid +1;
}else if(mid*mid > x){
right = mid - 1;
}
}
return (int)right;
}
}
해설 :
- 이 문제도 unlike가 상당히 많은 문제인데, 역시나 조건이 명확치 않다.
- 처음에는 완전탐색으로 해결하려했으나, 테스트 케이스 중 Integer 범위를 넘어가는 케이스가 있었고,
Long type으로 변환했으나 runtime error가 발생하는 것으로 보아 애초에 완전탐색으로 풀지 못하도록 하는 문제인 것 같았다.
- 그래서 시간복잡도가 조금 더 낮은 이진탐색을 도입해서 문제를 해결했다.
- 또한, 마지막에 소수점 이하를 버리는 개념을 적용시켜야 하기 때문에 left가 right를 역전한 뒤, right를 출력해 마무리해야했다.
'Algorithm > LeetCode' 카테고리의 다른 글
[Java] 83. Remove Duplicates from Sorted List (0) | 2023.06.09 |
---|---|
[Java] 70. Climbing Stairs (2) | 2023.06.09 |
[Java] 67. Add Binary (0) | 2023.06.08 |
[Java] 66. Plus One (0) | 2023.06.08 |
[Java] 58. Length of Last Word (3) | 2023.06.08 |