-
[다시풀기/프로그래머스] 이분탐색코딩테스트 2023. 6. 9. 18:41
function solution(stones, k) { // 이분탐색을 사용한다. let left = 1; let right = 200000000; while(left <= right) { const mid = Math.floor((left + right) / 2) let count = 0; for(let i = 0; i < stones.length; i++) { if(stones[i] - mid <= 0) count++; else count = 0; if(count === k) break; } if(count === k) right = mid - 1; else left = mid + 1; } return left; } // function solution(stones, k) { // var answer = 0; // //어렵네 // //일일이 돌면서 +하는 방법도 있을거고, 더 좋은 방법도 있을텐데... // //이중포문 실패했음. 즉 한번의 for문으로 해결해야한다는건데... // //이번에도 윈도우를 이용한다 치면... // //일단 제일 작은 숫자만큼은 다 이용할 수 있음. // //k 크기로 윈도우를 넣고 그 사이에서는 제일 큰 값인것들을 배열에 저장하고 그 중 제일 작은것을 고르면됨. // let left = 0; // let right = k // let maxArr = [] // let windowArr = stones.slice(left,right) // if(k===stones.length){ return Math.max(...stones)} // while(right<stones.length){ // //이전의 right이 다음턴에 안으로 들어오고 이전의 left가 다음턴에 밖으로 빠지는 것임. // let max = Math.max(...stones.slice(left,right)) // maxArr.push(max) // left++; // right++; // } // return Math.min(...maxArr); // }
위에는 이분탐색을 이용한 풀이법(다른사람의 풀이 참조) 밑에는 내가 짠 슬라이딩 윈도우를 활용한 방법이다.
'코딩테스트' 카테고리의 다른 글
[못풀었다/프로그래머스] 가장 먼 노드 (0) 2023.06.10 [릿코드/문제잘보기] 744. Find Smallest Letter Greater Than Target (0) 2023.06.09 [못풀었다/프로그래머스] 불량사용자 (0) 2023.06.09 [프로그래머스] 보석쇼핑 (1) 2023.06.09 [예외처리못함/프로그래머스] 베스트앨범 (0) 2023.06.07