🔥개인 취미 목적으로 프로그래머스 문제를 정리한 게시글입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12934
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✏️ 문제설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고,
n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
💡 제한사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
📚 입출력 예
n | return |
121 | 144 |
3 | -1 |
💻 소스 코드
class Solution {
public long solution(long n) {
double x = Math.sqrt(n);
if (x % 1 == 0) {
return (long) Math.pow(x + 1, 2);
}
return -1;
}
}
주어진 코드는 정수 n을 입력으로 받아서, 만약 n이 어떤 정수의 제곱이라면 그 다음 정수의 제곱을 반환하고, 그렇지 않으면 -1을 반환하는 함수입니다.
코드의 동작을 다음과 같이 설명할 수 있습니다.
- Math.sqrt() 함수를 사용해서 입력된 n의 제곱근을 계산하고, 그 결과를 x라는 변수에 저장합니다.
- x를 1로 나눈 나머지를 확인하여 x가 정수인지 여부를 판단합니다.
- 만약 x가 정수라면, 입력된 n이 어떤 정수의 제곱이라는 의미입니다. 이 경우, x + 1을 계산하고 이 값을 제곱하여 반환합니다. Math.pow(x + 1, 2)를 사용하여 x + 1의 제곱을 계산합니다.
- x가 정수가 아니라면, 즉, x % 1 != 0 조건이 참인 경우, n은 어떤 정수의 제곱이 아니므로 -1을 반환합니다.
이 코드는 입력된 n이 어떤 정수의 제곱인지를 판별하고, 그에 따라 다음 정수의 제곱을 계산하여 반환하거나 -1을 반환하는 방식으로 동작합니다. 반환되는 값은 입력된 n이 어떤 정수의 제곱인 경우에만 변경되며, 그 외에는 -1을 반환합니다.
Math 클래스에서
sqrt() 함수는 제곱근을 구하는 함수이고, pow() 함수는 제곱을 구하는 함수입니다.
단, double 타입으로 변환되기 때문에 long으로 형변환을 해서 반환했습니다.
시간 복잡도
Math.sqrt() 함수는 입력값 n의 제곱근을 계산하는 데 O(1)의 시간복잡도가 걸리고, x % 1 연산에서 입력값 x의 정수 부분을 확인하는 데 O(1)의 시간 복잡도가 발생합니다. 그리고 Math.pow(x + 1, 2)의 연산도 입력값 x를 이용해서 계산하여 O(1)의 시간이 걸리기 때문에, 전체 코드의 시간 복잡도는 O(1)입니다.
공간 복잡도
코드에서 사용되는 변수 x는 입력값 n을 변환하고 저장하는 데 필요한 공간을 사용하므로 공간 복잡도는 O(1)입니다. 배열이나 데이터 구조를 동적으로 할당하지 않고 고정 크기의 변수를 사용하기 때문에 추가적인 메모리 공간이 필요하지 않습니다.
'🕊️ 프로그래머스 > Lv1' 카테고리의 다른 글
[프로그래머스] Lv.1 정수 내림차순으로 배치하기 - Java (3) | 2023.11.28 |
---|---|
[프로그래머스] Lv.1 하샤드 수 - Java (0) | 2023.11.28 |
[프로그래머스] Lv.1 문자열 내 p와 y의 개수 - Java (0) | 2023.11.25 |
[프로그래머스] Lv.1 자릿수 더하기 - Java (0) | 2023.11.24 |
[프로그래머스] Lv.1 자연수 뒤집어 배열로 만들기 - Java (0) | 2023.11.23 |
🔥개인 취미 목적으로 프로그래머스 문제를 정리한 게시글입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12934
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✏️ 문제설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고,
n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
💡 제한사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
📚 입출력 예
n | return |
121 | 144 |
3 | -1 |
💻 소스 코드
class Solution {
public long solution(long n) {
double x = Math.sqrt(n);
if (x % 1 == 0) {
return (long) Math.pow(x + 1, 2);
}
return -1;
}
}
주어진 코드는 정수 n을 입력으로 받아서, 만약 n이 어떤 정수의 제곱이라면 그 다음 정수의 제곱을 반환하고, 그렇지 않으면 -1을 반환하는 함수입니다.
코드의 동작을 다음과 같이 설명할 수 있습니다.
- Math.sqrt() 함수를 사용해서 입력된 n의 제곱근을 계산하고, 그 결과를 x라는 변수에 저장합니다.
- x를 1로 나눈 나머지를 확인하여 x가 정수인지 여부를 판단합니다.
- 만약 x가 정수라면, 입력된 n이 어떤 정수의 제곱이라는 의미입니다. 이 경우, x + 1을 계산하고 이 값을 제곱하여 반환합니다. Math.pow(x + 1, 2)를 사용하여 x + 1의 제곱을 계산합니다.
- x가 정수가 아니라면, 즉, x % 1 != 0 조건이 참인 경우, n은 어떤 정수의 제곱이 아니므로 -1을 반환합니다.
이 코드는 입력된 n이 어떤 정수의 제곱인지를 판별하고, 그에 따라 다음 정수의 제곱을 계산하여 반환하거나 -1을 반환하는 방식으로 동작합니다. 반환되는 값은 입력된 n이 어떤 정수의 제곱인 경우에만 변경되며, 그 외에는 -1을 반환합니다.
Math 클래스에서
sqrt() 함수는 제곱근을 구하는 함수이고, pow() 함수는 제곱을 구하는 함수입니다.
단, double 타입으로 변환되기 때문에 long으로 형변환을 해서 반환했습니다.
시간 복잡도
Math.sqrt() 함수는 입력값 n의 제곱근을 계산하는 데 O(1)의 시간복잡도가 걸리고, x % 1 연산에서 입력값 x의 정수 부분을 확인하는 데 O(1)의 시간 복잡도가 발생합니다. 그리고 Math.pow(x + 1, 2)의 연산도 입력값 x를 이용해서 계산하여 O(1)의 시간이 걸리기 때문에, 전체 코드의 시간 복잡도는 O(1)입니다.
공간 복잡도
코드에서 사용되는 변수 x는 입력값 n을 변환하고 저장하는 데 필요한 공간을 사용하므로 공간 복잡도는 O(1)입니다. 배열이나 데이터 구조를 동적으로 할당하지 않고 고정 크기의 변수를 사용하기 때문에 추가적인 메모리 공간이 필요하지 않습니다.
'🕊️ 프로그래머스 > Lv1' 카테고리의 다른 글
[프로그래머스] Lv.1 정수 내림차순으로 배치하기 - Java (3) | 2023.11.28 |
---|---|
[프로그래머스] Lv.1 하샤드 수 - Java (0) | 2023.11.28 |
[프로그래머스] Lv.1 문자열 내 p와 y의 개수 - Java (0) | 2023.11.25 |
[프로그래머스] Lv.1 자릿수 더하기 - Java (0) | 2023.11.24 |
[프로그래머스] Lv.1 자연수 뒤집어 배열로 만들기 - Java (0) | 2023.11.23 |