Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 배열
- 자바스크립트
- 프로세스
- Machine Learning
- 코딩테스트
- 자료구조
- 큐
- APOLLO
- 포인터
- pytorch
- RT scheduling
- 연결리스트
- 해시테이블
- 웹팩
- 컨테이너
- 프론트엔드
- 프로그래머스
- 이진탐색
- 타입스크립트
- RxJS
- cors
- C
- 스택
- 릿코드
- vue3
- 연결 리스트
- GraphQL
- 브라우저
- 알고리즘
- alexnet
Archives
- Today
- Total
프린세스 다이어리
[LeetCode] Sqrt 문제 - 자바스크립트 풀이 본문
728x90
1. 접근방법
(1) mid를 제곱근으로 두고, low는 1, high는 x의 절반 값으로 둔다. 제곱근은 x의 절반보다 클 수 없다.
let low = 1;
let high = x / 2;
let mid = 0;
(2) 기본 이진탐색을 진행한다. 단, low와 high를 옮기는 판단 기준은 mid * mid가 x보다 큰지 작은지로 설정한다.
while (low <= high) {
mid = Math.floor((high + low) / 2);
if (mid * mid === x) return mid;
if (mid * mid < x) {
low = mid + 1;
} else {
high = mid - 1;
}
}
(3) 만약 while문의 결과로 8의 제곱근 mid가 3으로 나오면 3의 제곱은 8보다 크므로 -1을 한 2를 리턴하도록 한다.
if (mid * mid > x) return mid - 1;
(4) 1의 경우 제곱근을 1로 리턴하도록 예외처리를 추가한다.
if (x <= 1) return x
2. 전체 풀이
var mySqrt = function(x) {
if (x <= 1) return x
let low = 1;
let high = x / 2;
let mid = 0;
while (low <= high) {
mid = Math.floor((high + low) / 2);
if (mid * mid === x) return mid;
if (mid * mid < x) {
low = mid + 1;
} else {
high = mid - 1;
}
}
if (mid * mid > x) return mid - 1;
return mid
};
이게 이진탐색 문제인 걸 파악하는데 이틀걸림 화남
728x90
'자료구조, 알고리즘' 카테고리의 다른 글
[LeetCode] First Bad Version - 자바스크립트 풀이 (0) | 2021.11.28 |
---|---|
[LeetCode] Search in Rotated Sorted Array - 자바스크립트 풀이 (0) | 2021.11.28 |
[프로그래머스] 로또의 최고 순위와 최저 순위 - 자바스크립트 (0) | 2021.11.27 |
[프로그래머스] 신규 아이디 추천 - 자바스크립트 풀이 (0) | 2021.11.26 |
[프로그래머스] 입국심사 문제 - 파이썬 풀이 (0) | 2021.11.25 |
Comments