제곱수 판별하기
Algorithm 관련 포스팅
- 최빈값 구하기
- k의 개수 구하기
- String
- 문자열 정렬하기
- 인덱스 바꾸기
- 제곱수 판별하기
- Math
- 배열 회전시키기
- A로 B 만들기
- 잘라서 배열로 저장하기
- Array와 ArrayList
- 저주의 숫자 3
이 글은 프로그래머스의 제곱수 판별하기의 풀이를 정리한 것입니다.
문제 설명
어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n
이 매개변수로 주어질 때, n
이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
n
≤ 1,000,000
입출력 예
n | result |
---|---|
144 | 1 |
976 | 2 |
입출력 예 설명
입출력 예 #1
- 144는 12의 제곱이므로 제곱수입니다. 따라서 1을 return합니다.
입출력 예 #2
- 976은 제곱수가 아닙니다. 따라서 2를 return합니다.
나의 풀이(1)
Math.sqrt(double a)
: double 값의 양의 제곱근 반환Math.floor(double a)
: double 값보다 작거나 같은 정수(내림값) 반환- 제곱근과 제곱근의 내림값이 같으면 즉, 제곱근이 양의 정수이면 제곱수임
- 예시
// 256은 제곱수임 // 256은 제곱근인 16을 제곱한 수 System.out.println(Math.sqrt(256)); // 16.0 System.out.println(Math.floor(Math.sqrt(256))); // 16.0 // 6은 제곱수가 아님 // 6의 제곱근은 정수가 아님 System.out.println(Math.sqrt(6)); // 2.449489742783178 System.out.println(Math.floor(Math.sqrt(6))); // 2.0
- result
16.0 16.0 2.449489742783178 2.0
class Solution {
public int solution(int n) {
int answer = 0;
// 제곱근과 제곱근의 내림값이 같으면 제곱수임
if (Math.sqrt(n) == Math.floor(Math.sqrt(n))) answer = 1;
else answer = 2;
return answer;
}
}
나의 풀이(2)
i
값이 1부터 1씩 증가하며,i
를 제곱한 값이n
보다 작은for
문i
로 나누어 떨어지고,i
로 나눈 몫이i
인 값을 찾으면answer
를 1로 반환
class Solution {
public int solution(int n) {
int answer = 2;
// 1.
for (int i = 1; i*i <= n; i++) {
// 2.
if ((n % i == 0) && (n / i == i)) answer = 1;
}
return answer;
}
}
나의 풀이(3)
- 제곱근으로 나누어 떨어지는 수인지 판별
class Solution {
public int solution(int n) {
int answer = 0;
// 제곱근으로 나누어 떨어지는 수는 제곱수
if (n % Math.sqrt(n) == 0) answer = 1;
else answer = 2;
return answer;
}
}