이번에 풀어 볼 문제는 제곱수 판별하기이다.
알고리즘 느낌보다는 뭔가 수학적인 지식이 필요한 느낌... ? 🧐
문제를 한번 봐보자
class Solution {
public int solution(int n) {
int answer = 0;
for(int i = 0; i <= n; i++){
if(i * i == n){
answer = 1;
}
if(answer != 1){
answer = 2;
}
}
return answer;
}
}
어떤 자연수를 제곱하였을때 나오는 정수를 제곱수라고 한다
문제는 같은 특정한 수 가 연속해서 서로 곱해졌을때 나오는 수라고 볼 수 있다
음 예를 들어서 12 * 12 = 144 이런식으로 ?
그러므로 나는 for문을 사용하기로 하였다
특정한 수 를 i 로 생각하였다
그러므로 조건을 특정한수 x 특정한수 즉 i x i 로 잡아주었다
for문이 0~n(내가 입력한 자연수) 까지 돌면서 조건을 충족시켜주면 제곱수 아니라면 제곱수가 아닐것이다
만약에 n이 976이라고 해보자
음 900 이상 정도가 나오는 제곱수가 30 부터인데
30 x 30 = 900
31 x 31 = 961
32 x 32 = 1024
976은 절대 제곱수로 나올수 없는 숫자이다
그래서 조건을 아래 추가하였다
if (answer !== 1) {
answer = 2;
}
만약 답이 1이 아닐경우에는 전부 제곱수가 아니기때문에 2를 return 시키도록 조건문을 하나 더 추가하였다.