개발자로 전향중

[프로그래머스] 정수 제곱근 판별 - 이진탐색 본문

자료구조&알고리즘

[프로그래머스] 정수 제곱근 판별 - 이진탐색

hovinee 2024. 9. 26. 18:26

문제 설명

 

문제풀이

function findNextSquare(n) {
  let low = 1;
  let high = n;
  
  // 이진 탐색 시작
  while (low <= high) {
    let mid = Math.floor((low + high) / 2);
    let square = mid * mid;
    
    if (square === n) {
      // n이 mid의 제곱이라면, (mid+1)의 제곱을 반환
      return (mid + 1) * (mid + 1);
    } else if (square < n) {
      low = mid + 1;  // 제곱이 n보다 작으면 더 큰 범위에서 탐색
    } else {
      high = mid - 1; // 제곱이 n보다 크면 더 작은 범위에서 탐색
    }
  }
  
  // 제곱근을 찾지 못했을 때
  return -1;
}

// 테스트 예시
console.log(findNextSquare(121)); // 144 (11^2 이므로 12^2 반환)
console.log(findNextSquare(625)); // 676 (25^2 이므로 26^2 반환)
console.log(findNextSquare(114)); // -1 (제곱수가 아니므로 -1 반환)