문제
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
class Solution {
public long solution(long n) {
long answer = 0;
return answer;
}
}
제한사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력 예
n | return |
121 | 144 |
3 | -1 |
입출력 예 설명
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
문제 풀이
분석
제곱근인지 판단하는 방법
sqrt
Java에서 Math.sqrt() 메서드를 사용하여 제곱근을 계산
이 메서드는 double 타입의 값을 반환함
주요 Math 메서드
제곱근 계산 | 주어진 숫자의 제곱근을 계산 | Math.sqrt(16)은 4.0을 반환 |
거듭제곱 | a의 b 제곱을 계산 | Math.pow(2, 3)은 8.0을 반환 |
절댓값 | 주어진 숫자의 절댓값을 반환 | Math.abs(-5)은 5를 반환 |
최대값과 최소값 | 두 값 중 최대값 또는 최소값을 반환 | Math.max(3, 5)는 5를 반환하고, Math.min(3, 5)는 3을 반환 |
랜덤 숫자 생성 | 0.0 (포함)에서 1.0 (미포함) 사이의 랜덤 double 값을 반환 | Math.random()은 0.3456789와 같은 랜덤한 값이 반환 |
삼각 함수 | 주어진 각도를 라디안으로 받아 삼각 함수를 계산 | Math.sin(Math.PI / 2)는 1.0을 반환 |
내 소스 코드
1.java 메서드 활용
java 메서드 Math.sqrt(num)는 주어진 숫자의 제곱급을 double 타입으로 반환함
class Solution {
public long solution(long n) {
long sqrt = (long) Math.sqrt(n); // 제곱근을 구하고 long으로 형 변환
// 제곱근의 제곱이 n과 같다면 다음 제곱수를 반환
if (sqrt * sqrt == n) {
return (sqrt + 1) * (sqrt + 1);
}
// 제곱수가 아니면 -1 반환
return -1;
}
}
2.수학적으로 구현
class Solution {
public long solution(long n) {
// 1부터 시작하여 제곱이 n과 같은 숫자를 찾기
for (long i = 1; i * i <= n; i++) { // i를 long 타입으로 변경하여 범위 내에서 정확히 계산
if (i * i == n) {
return (i + 1) * (i + 1); // 다음 제곱수를 반환
}
}
return -1; // n이 완전 제곱수가 아닐 경우 -1 반환
}
}
다른 예시 1
class Solution {
public long solution(long n) {
if (Math.pow((int)Math.sqrt(n), 2) == n) {
return (long) Math.pow(Math.sqrt(n) + 1, 2);
}
return -1;
}
}
다른 예시 2
class Solution {
public long solution(long n) {
if(n==1){
return 4;
}
for(long i=2;i<n;i++){
if(n/i == i && n%i ==0){
return (i+1)*(i+1);
}
}
return -1;
}
}
추가로 고민 할 부분
함수를 사용해야 점수가 높게 나온다.
하지만 수학적인 부분도 알아야 하는게 맞는것 같다
java Math 메서드에 대해 공부할 수 있었음
Lv.1 / Java / 연습문제
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
'공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv. 2] 최댓값과 최솟값 - JAVA (0) | 2024.08.11 |
---|---|
[프로그래머스 Lv. 1] 하샤드 수 - JAVA (0) | 2024.08.10 |
[프로그래머스 Lv. 1] 정수 내림차순으로 배치하기 - JAVA (0) | 2024.08.08 |
[프로그래머스 Lv. 1] 평균 구하기 - JAVA (0) | 2024.08.07 |
[프로그래머스 Lv. 1] 짝수와 홀수 - JAVA (0) | 2024.08.06 |