본문 바로가기
Algorithm/LeetCode

[Java] 69. Sqrt(x)

by tabasco 2023. 6. 9.

문제 설명 :

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