https://programmers.co.kr/learn/courses/30/lessons/68646
검색하려는 값(target) 기준으로 좌, 우 배열의 최솟값 left, right을 구하고 최솟값들이 target 보다 크다면 성공, 하나만 작다면 찬스를 이용해 성공, 둘 다 작다면 실패입니다.
const leftMin = Math.min.apply(null, a.slice(0, idx));
const rightMin = Math.min.apply(null, a.slice(idx + 1, len));
leftArray = [-16,-16,-16,-16,-16,-92,-92,-92,-92,-92]
a = [-16, 27, 65, -2, 58,-92,-71,-68,-61,-33]
rightArray = [-92,-92,-92,-92,-92,-92,-71,-68,-61,-33]
function solution(a) {
if (a.length < 3) return a.length;
let answer = 0;
let leftArray = [];
let rightArray = [];
let leftMin = a[0];
let rightMin = a[a.length - 1];
a.forEach((_, idx) => {
leftMin = leftMin < a[idx] ? leftMin : a[idx];
leftArray.push(leftMin);
rightMin = rightMin < a[a.length - 1 - idx] ? rightMin : a[a.length - 1 - idx];
rightArray.push(rightMin);
});
rightArray.reverse();
a.forEach((value,idx)=>{
const left = leftArray[idx];
const right = rightArray[idx];
const target = value;
if (left === target || right === target) answer++;
})
return answer;
}
// const a = [-16, 27, 65, -2, 58, -92, -71, -68, -61, -33];
// solution(a);