[Programmers/C++] 정수 제곱근 판별

2024. 7. 18. 21:14·🐸 Problem Solving/Programmers

☁ sqrt() 함수를 사용한 간단한 풀이와 내장함수를 사용하지 않고 이진 탐색(Binary Search)을 이용한 풀이가 있다.

 


문제

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

 

 

 

 

입출력 예시

 


풀이 #1 | sqrt() 함수 이용

#include <math.h>
using namespace std;

long long solution(long long n) {
    long long answer = 0;
    answer = sqrt(n) - int(sqrt(n)) == 0? pow(sqrt(n)+1, 2) : -1;
    
    return answer;
}

 

 

 

 

풀이 #2 | 내장함수 x, 이진 탐색 이용

using namespace std;

long long solution(long long n) {
    long long left = 1, right = n;
    
    while (left <= right) {
        long long mid = left + (right - left) / 2;
        
        if (mid <= n / mid) {
            if (mid * mid == n) {
                return (mid + 1) * (mid + 1); // 제곱근 찾음
            }
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    
    return -1;  // 제곱근 못찾음
}

 

 

💣 내장함수의 메커니즘을 구현해 보겠다는 오기로 시작한 두 번째 풀이..

이진 탐색을 이용하여 중간 값부터 탐색하여 현재의 중간값이 찾고자 하는 제곱근인지, 더 큰지, 더 작은지를 판단하며 찾아가는 방식으로 풀었다.

 

🧨 오버 플로우 방지!

long long 범위를 벗어나는 mid * mid가 나오는 것을 예방하여, 9번째 줄에서 한 번 체크하고 넘어가도록 작성했다. 

설마설마했는데 넘어가는 경우가 존재했다..

 

설마설마할 시간에 문제 해결을 하자!

저작자표시 비영리 변경금지 (새창열림)

'🐸 Problem Solving > Programmers' 카테고리의 다른 글

[Programmers/C++] 코드 처리하기  (0) 2024.07.19
[Programmers/C++] [PCCP 기출문제] 1번 / 붕대 감기  (0) 2024.06.24
[Programmers/C++] [PCCE 기출문제] 10번 / 데이터 분석  (0) 2024.06.14
'🐸 Problem Solving/Programmers' 카테고리의 다른 글
  • [Programmers/C++] 달리기 경주
  • [Programmers/C++] 코드 처리하기
  • [Programmers/C++] [PCCP 기출문제] 1번 / 붕대 감기
  • [Programmers/C++] [PCCE 기출문제] 10번 / 데이터 분석
Mojing_
Mojing_
매일 매일 경험치를 쌓는 모징이의 개발 블로그입니다 :) This is Mojing’s Dev Blog where she gain experience points every day. :)
  • Mojing_
    모징이의 개발 경험치
    Mojing_
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • 👻 Unity (3)
        • 🔧 기능 구현 (0)
        • 💡 유니티 팁 (0)
        • 📘 Unity 노트 (1)
        • 🏗️ 디자인 패턴 (0)
        • 🎨 그래픽 & 렌더링 (0)
      • 💻 Programming (14)
        • C (3)
        • C++ (9)
        • C# (0)
        • Swift (2)
      • 💾 Computer Science (16)
        • Algorithm (9)
        • Software Engineering (7)
      • 🐸 Problem Solving (108)
        • Programmers (41)
        • BOJ (67)
      • 🔋 ETC (0)
      • 💡 Quest Log (0)
  • 인기 글

  • 공지사항

  • 태그

    CS
    오블완
    DFS/BFS
    sort
    티스토리챌린지
    algorithm
    programmers
    Problem Solving
    프로그래머스
    backtracking
    dynamic programming
    Design Pattern
    BOJ
    탐색
    C++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Mojing_
[Programmers/C++] 정수 제곱근 판별
상단으로

티스토리툴바