일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- vue3
- 프론트엔드
- C
- 타입스크립트
- 프로세스
- RT scheduling
- 알고리즘
- 큐
- 프로그래머스
- 연결리스트
- RxJS
- 웹팩
- Machine Learning
- 해시테이블
- cors
- 포인터
- pytorch
- 연결 리스트
- APOLLO
- 릿코드
- 컨테이너
- GraphQL
- 코딩테스트
- 스택
- 브라우저
- alexnet
- 자바스크립트
- 배열
- 이진탐색
- 자료구조
- Today
- Total
목록분류 전체보기 (164)
프린세스 다이어리
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bsgpDW/btrmtgtjkOO/EEzlH2ifGk5zjhblTUJ1nk/img.png)
문제 링크 1. 접근 방법 (1) 주어지는 배열이 오름차순 정렬돼 있고, 특정 조건에 따라 피벗 값을 기준으로 검사 위치를 변경해가며 푸는 문제이므로 이진 탐색 문제다. (2) left는 나중에 slice할 범위의 왼쪽 끝 인덱스다. (3) right가 arr.length - k로 초기화되어 있는 이유는 left 인덱스로부터 k만큼 자르기 위해 가능한 최대 인덱스이기 때문이다. let left = 0; let right = arr.length - k; (4) left
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nisgq/btrmiTeRYwK/8JMchdAfglZ3cjW4f2kFN0/img.png)
문제 링크 두시간 가까이 걸림.. 1. 접근 방법 (1) 중복을 허용한 오름차순 배열이 주어지고 + O(logN) 시간복잡도로 풀으라고 했으며 + 피벗을 기준으로 왼쪽과 오른쪽의 값을 비교해야 하는 문제이므로 이진탐색으로 푼다. (2) getIndex 라는 함수를 만들어서, 배열, 타깃, isLeftArray를 파라미터로 받아 주어진 타깃 범위의 첫 인덱스 또는 범위의 마지막 인덱스를 리턴하도록 한다. const getIndex = (nums, target, isLeftIndex) => { if (nums.length === 0) return -1; let left = 0; let right = nums.length - 1; let mid = 0; if (isLeftIndex) { // ... } els..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/em0r7B/btrmnmneuoB/umDJMneLW7DHjZy2KjnHlK/img.png)
문제 링크 이전 회전배열 탐색 문제 풀고 오니 핵쉬움 3분컷(문제 풀이 조건이 쉽게 주어지긴 했음) 1. 접근 방법 (1) mid 값이 mid - 1 값보다 작은 경우, 회전된 상태에서 mid값이 인덱스 0인 경우이므로 mid의 값을 반환한다. if (nums[mid - 1] > nums[mid]) return nums[mid]; (2) mid 기준 왼쪽이 정렬된 상태면 left를 mid + 1로 옮겨 준다, (3) mid 기준 오른쪽이 정렬된 상태면 right를 mid로 옮겨 준다. if (nums[0] < nums[mid]) { // 왼쪽이 정렬된 상태일 때 left = mid + 1; } else { // 오른쪽이 정렬된 상태일 때 right = mid; } (4) 주어지는 배열의 길이가 1이거나 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DzPHE/btrmopD0F9m/KsFKsC6keSTRSNx9HfEea1/img.png)
문제 링크 이진탐색으로 푸는 것 자체는 별로 어렵진 않았으나 슬슬 이진탐색 풀이가 필요하다는 것을 떠올리기 힘들 것 같음 1. 접근 방법 (1) 정렬이 돼 있지 않은 nums가 주어짐에도 문제가 이진 탐색 분류 내에 있는 이유는 역시 기준 mid의 양옆 원소를 비교해서 왼쪽이 클 때와 오른쪽이 클 때를 구분하는 로직이 필요하기 때문임 (2) mid의 양옆 원소가 mid보다 작으면 mid 리턴. if (nums[mid - 1] nums[mid + 1]) return mid; (3) mid의 원소가 mid+1의 원소보다 작으면 left를 mid의 오른쪽으로 넘겨줌. (4) mid의 원소가 mid+1의 원소보다 보다 크면 right를 mid 값으로 옮겨줌. if..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dLr4YJ/btrmrtF6vkR/z2w11i1aQRsrA2pW0hdYp0/img.png)
문제 링크 왜 "Advanced" Binary Search 인지 모르겠으나 여기서 원하는 대로 풀어드림. 1. 접근 방법 (1) 장애 난 버전이랑 그렇지 않은 버전을 나누어서 탐색하면 되므로 이진탐색으로 접근한다 (2) 이전 버전 mid - 1이 정상 버전이고 지금 검사중인 mid 버전이 장애 난 버전이면 지금 검사중인 mid 버전 리턴. if (!isBadVersion(mid - 1) && isBadVersion(mid)) return mid; (3) 그 외 경우에서, 지금 버전 mid가 장애 난 버전이면 왼쪽 리스트 탐색하고, 정상 버전이면 오른쪽 리스트를 탐색한다. if (isBadVersion(mid)) { right = mid; } else { left = mid + 1; } (4) left 리..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lssJH/btrmhtVqK6d/AVEOrkmX7OpgTXQbeukehk/img.png)
1. 접근 방법 (1) mid기준 오른쪽이 정렬됐을 경우와, mid기준 왼쪽이 정렬됐을 경우를 나눈다. if (nums[left]
this란 함수를 호출할 때 생성되는 실행 컨텍스트 객체다. this가 가리키는 대상은 어떻게 this가 호출되는지에 따라 다르다. 아래 상황별로 this의 의미를 나눌 수 있다. → 전역 공간에서의 this → 메서드로서 호출할 때 내부에서의 this → 함수로서 호출할 때 내부에서의 this → 콜백 함수 호출 시 내부에서의 this → 생성자 함수 내부에서의 this 1. 전역 공간에서의 this 전역 공간에서 this는 전역 객체를 가리킴. (this 콘솔에 찍으면 전역객체 나온다는 뜻) console.log(this) // {alert: f(), atob: f(), blur: f(), ...} console.log(window) // {alert: f(), atob: f(), blur: f(),..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bjoCBj/btrmhYtXB3L/jdRvaFwcgzqJfVAK9hEgdk/img.png)
문제 링크 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 x) return mid - 1; (4) 1의 경우 제곱근을 1로 리턴하도록 예외처리를 추가한다. if (x