오늘은 코테 문제들을 푸는 수업이 많았다. 프로그래머스 Lv.1~Lv.2를 간신히 푸는 나에게 Lv.3의 문제들 정말 너무 어려웠다...😮 이해하는데 기본 30분이상 걸리는 것 같다. 그래도 문제에 대한 접근법들을 여러가지 생각해가면서 실패도 많이 해보고 성공도 해보는 경험이 즐거웠다. 좀 더 시간투자를 해서 문제해결능력을 기르자. 오늘의 회고 TIL 끝!😊
예시) Up/Down 게임
반드시 정렬이 되어있어야 사용할 수 있다.
배열 혹은 이진 트리를 이요하여 구현할 수 있다.
O(logn)인 만큼 속도가 굉장히 빠르다
const array = [1, 1, 5, 124, 400, 599, 1004, 2876, 8712];
function binarySearch(array, findValue) {
let left = 0;
let right = array.length - 1;
let mid = Math.floor((left + right) / 2);
while (left < right) {
if (array[mid] === findValue) {
return mid;
}
if (array[mid] < findValue) {
left = mid + 1;
} else {
right = mid - 1;
}
mid = Math.floor((left + right) / 2);
}
return -1;
}
console.log(binarySearch(array, 2876));
console.log(binarySearch(array, 1));
console.log(binarySearch(array, 500));
이진 탐색을 위한 이진 트리로 왼족 서브 트리는 루트보다 작은 값이 모여있고 오른쪽 서브 트리는 루트보다 큰 값이 모여있다. 이 규칙을 지키면서 요소를 추가해주면 된다.
이진탐색 트리 요소 삭제
그래프 탐색 알고리즘으로 같은 깊이에 해당하는 정점부터 탐색하는 알고리즘
그래프 탐색 알고리즘으로 최대한 깊은 정점부터 탐색하는 알골리즘
프로그래머스 Lv.2 큰 수 만들기 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42883
function solution(number, k) {
let cnt = 0;
const result = [];
for(let i = 0; i <number.length; i++){
//stack의 top과 number[i]를 비교해서 top이 작으면 stack에서 pop해준다.
while(number[i]> result[result.length-1] && cnt < k){
result.pop();
cnt++
}
//처음부터 넣어주면 다른 결과값이 나온다.특히 테스트 Case1같은 경우 top이 9가 되서 틀린 답이 나옴
//갯수를 채워주도록 뒤에 위치시켜야한다.
if(result.length < number.length -k){
result.push(number[i]);
}
}
return result.join('');
}