제곱수 판별하기
https://school.programmers.co.kr/learn/courses/30/lessons/120909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1) 문제
정수 n이 매개변수로 주어질 때,
n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.
1 ≤ n ≤ 1,000,000
2) 예시
n | result |
---|---|
144 | 1 |
976 | 2 |
입출력 예 #1
144는 12의 제곱이므로 제곱수입니다. 따라서 1을 return합니다.
입출력 예 #2
976은 제곱수가 아닙니다. 따라서 2를 return합니다.
3) 풀이
1. 클래스 선언을 해줍니다
● class Solution {
클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.
2. 정수 n을 매개변수로 하는 solution 메소드를 선언합니다.
solution은 정수를 반환하므로 데이터타입을 int로 합니다.
● public int solution(int n) {
3. 제한사항을 확인하고, 만족하지 않을 경우 예외처리합니다.
● if(1 > n || n > 1_000_000){
throw new IllegalArgumentException("n은 1 이상 1000000 이하입니다.");
}
4. 정답이 될 변수 answer를 생성하고 초기화해줍니다.
for 반복문을 이용해서, i * i <= 일 때까지 i를 1씩 증가시키며 반복문을 실행해줍니다.
i * i 가 n (n이 제곱수이면) 이면 answer가 1, 아니면 2로 하고, 최종적으로 answer를 반환해줍니다.
● int answer = 0;
for(int i=0; i * i <= n; i++){
if(i * i == n){
answer = 1;
} else {
answer = 2;
}
}
return answer;
}
}
4) 코드
class Solution {
public int solution(int n) {
if(1 > n || n > 1_000_000){
throw new IllegalArgumentException("n은 1 이상 1000000 이하입니다.");
}
int answer = 0;
for(int i=0; i * i <= n; i++){
if(i * i == n){
answer = 1;
} else {
answer = 2;
}
}
return answer;
}
}
5) 느낀점
제곱수 여부를 확인할 때, for반복문의 조건식을 i <= n이 아니라, i * i <= n으로하여 반복횟수를 줄인점을 개인적으로 만족스럽게 생각합니다... 후후...너무 기본적인것이었나...
class Solution {
public int solution(int n) {
double sqrt = Math.sqrt(n);
if (sqrt == (int) sqrt) {
return 1; // n이 제곱수인 경우
} else {
return 2; // n이 제곱수가 아닌 경우
}
}
}
좀 더 알아보니 위 코드처럼 Math.sqrt 메소드를 이용하는 방법이 있었습니다.
괄호 안에 들어가는 숫자에 루트를 씌운다고 생각하니 쉽게 이해가 가는 메소드였습니다.
double로 그 변수를 선언하고 Math.sqrt메소드를 실행한 후, 정수로 형변환 했을 때,
정수라면 n이 제곱수가 되는 것이고, 아니라면 제곱수가 아니게 되는 것이죠.
'Programmers Coding Test > Java' 카테고리의 다른 글
[프로그래머스 120892] Java - 코딩테스트 입문 / 암호 해독 (0) | 2024.02.18 |
---|---|
[프로그래머스 120905] Java - 코딩테스트 입문 / n의 배수 고르기 (0) | 2024.02.18 |
[프로그래머스 120906] Java - 코딩테스트 입문 / 자릿수 더하기 (0) | 2024.02.18 |
[프로그래머스 120889] Java - 코딩테스트 입문 / 삼각형의 완성조건 (1) (0) | 2024.02.18 |
[프로그래머스 120910] Java - 코딩테스트 입문 / 세균 증식 (0) | 2024.02.18 |