[Java] 정수 제곱근 판별 Lv1
정수 제곱근 판별
문제 프로그래머스 FAQ 내용을 보니 카카오나 기업의 문제들은 저작권이 있으니 풀이를
github나 개인블로그에 올리지 말라고 되어 있어서 링크로 대체합니다.
출처: Programmers
정수 제곱근 판별
문제의 이해
문제의 이해 자체는 워낙 쉬운 문제라서 바로 이해가 됐는데 코드로 풀어나가는 부분을 어떻게 해야할지 고민이 많았다. sqrt와 pow를 이용하면 쉽게 풀 수 있다고 생각은 했는데 공부 중인데 sqrt와 pow를 이용하는 것이 맞는건가 라는 생각이 들어서다.
내가 생각한 풀이 방법
- 주어진 n의 제곱근을 구한다. Math.sqrt(n)
- 형변환을 통해서 구한 제곱근의 정수 부분만을 취한다. long = (long)double
- “제곱근 - 제곱근의 정수부분” 이 0보다 크다면 해당 제곱근은 정수가 아니다(return -1)
- 3번에서 제곱근이 정수일 경우 Math.pow((제곱근 + 1), 2)을 하면 원하는 결과가 나온다.
풀이
첫번째 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.lang.Math;
class Solution {
public long solution(long n) {
long conversionInt = 0; //제곱근을 구해서 그 제곱근의 정수 부분만 얻기 위한 변수
double squareRoot = Math.sqrt(n); //주어진 n의 제곱근을 구함
conversionInt = (long)squareRoot; //구한 제곱근의 정수 부분만 변수에 저장
//아래에서 설명한대로 구한 제곱근과 그 제곱근의 정수 부분만 저장한 변수를 빼면
//해당 제곱근이 정수가 아니라면 0.xxx값이 나올테니 0보다 크므로 주어진 n은 양의 정수 x를 가진 수가 아니므로 -1리턴
if ((squareRoot - (double)conversionInt) > 0)
{
return -1;
}
//위에서 조건 검사를 끝냈기 때문에 이 부분의 코드까지 실행이 되었다면
//주어진 n의 제곱근은 정수이기 때문에 위에서 구한 제곱근을 +1해서 제곱해주면 정답이 나옴.
long answer = (long)Math.pow((squareRoot + 1), 2);
return answer;
}
}
//어떠한 수의 제곱근을 구함(이때는 꼭 정수가 나오지 않음)
//구한 값을 int로 형 변환해서 저장
//그러면 소수점 윗 부분만 저장이 됨.
//int형식으로 저장된 것과 구한 제곱근을 - 시켜서 그 값이 0보다 크면 그건 정수가 아니므로
//-리턴 하면 됨
//다 좋은데 너무 math에 있는 함수들만 써서 공부하는 사람 입장에서는 좋지 않은 행동인듯.
Leave a comment